我喜欢新的Rail 3!
新的查询语法太棒了:
users = User.where(:name => 'Bob', :last_name => 'Brown')但是当我们需要做像这样的事情时
SELECT * FROM Users WHERE Age >= const AND Money > const2我们必须使用
users = User.where('Age >= ? and money > ?', const, const2)这并不是很酷。由于SQL注入,以下查询不安全:
users = User.where('Age >= #{const} and money > #{const2}')我喜欢C#/LINQ版本
var users = DB.Where(u => u.Age >= const && u.Money > const2);有没有办法在Rails中做这样的事情?
发布于 2010-08-01 01:25:56
使用rails进行新的查询不会受到SQL注入的影响。参数中的所有引号都将转义。
Rails 3 AR已经获得了LINQ已经有一段时间的延迟执行。这使您可以链接任何查询方法。当你想要一个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)发布于 2010-07-31 20:49:38
你可能会对MetaWhere感兴趣,你可以用它来写:
users = User.where(:age >= const, :money > const2)发布于 2010-07-31 20:35:47
在Rails 3中,您可以将这些选择链接在一起。我不了解具体的语法,但这是一个很好的开始:http://railscasts.com/episodes/202-active-record-queries-in-rails-3
基本概念是您可以将作用域或where子句等链接在一起:
这里的元代码:
users = User.where(:age_of_consent).where(:has_credit)
scope :age_of_consent where("age >= ?", 18)
scope :has_credit where("credit > ?", 10)https://stackoverflow.com/questions/3378081
复制相似问题