Ale*_*lex 1 linq ruby-on-rails
我喜欢新的Rail 3!
新的查询语法非常棒:
users = User.where(:name => 'Bob', :last_name => 'Brown')
Run Code Online (Sandbox Code Playgroud)
但是当我们需要做类似的事情时
SELECT * FROM Users WHERE Age >= const AND Money > const2
Run Code Online (Sandbox Code Playgroud)
我们必须使用
users = User.where('Age >= ? and money > ?', const, const2)
Run Code Online (Sandbox Code Playgroud)
这不是很酷.由于SQL注入,以下查询不安全:
users = User.where('Age >= #{const} and money > #{const2}')
Run Code Online (Sandbox Code Playgroud)
我喜欢C#/ LINQ版本
var users = DB.Where(u => u.Age >= const && u.Money > const2);
Run Code Online (Sandbox Code Playgroud)
有没有办法在Rails中做这样的事情?
使用rails进行的新查询不易受SQL注入攻击.参数中的任何引号都会被转义.
Rails 3 AR已经获得了LINQ已经有一段时间的延迟执行.这允许您链接任何查询方法.你需要将2个或更多部件放在一个地方的唯一时间OR.
除此之外,还有许多不同的方法可以进行查询.
Users.where('age >= ?', age).where('money > ?', money)
Users.where('age >= ? and money > ?', age, money)
class User < ActiveRecord::Base
scope :aged, lambda { |age| where('age >= ?', age) }
scope :enough_money, lambda { |money| where('money > ?', money) }
scope :can_admit, lambda { |age, money| aged(age).enough_money(money) }
end
Users.aged(18).enough_money(200)
Users.can_admit(18, 200)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |