Rails 3 ActiveRecord查询语法

时间:2012-08-21 07:28:49

标签: ruby-on-rails activerecord

修改

这是工作语法......

Model.where('name like ?', "%#{q}%").where('value > ?', c)

Model.where("name like (?)","%#{q}%").where("value > ?",c)

感谢海报帮助他们。


原始问题

我无法理解活动记录语法。

这是我正在尝试做的事情

q = "John"
c = 50

Model.where('name like ? AND value > ?', "%#{q}%", "%#{c}%")

这是错误的语法。

我想要实现的是

name like John AND value greater than 50

如何在ActiveRecord中将不同类型的查询链接在一起?

感谢。

3 个答案:

答案 0 :(得分:4)

不要引用q和c:

Model.where('name like ? AND value > ?', q, c)

Rails会自动将变量转换为适合您的字符串。

链接是指where(),select(),order()函数的链接,例如,这相当于上面的内容:

Model.where('name like ?', q).where('value > ?', c)

如果您只想为%位添加%通配符,则可以执行以下操作:

Model.where('name like ?', "%#{q}%").where('value > ?', c)

答案 1 :(得分:1)

您可以尝试Model.where("name like (?)","%#{q}%").where("value > ?",c)。或使用范围来帮助进一步轻松链接

答案 2 :(得分:1)

对于使用AREL的Rails 3,

ut = User.arel_table
users = User.where(ut[:name].matches("%#{q}%").and(ut[:value].gt(c)))
# SELECT "users".* FROM "users" WHERE ("users"."name" LIKE '%John%' AND "users"."value" > 50)