0

编辑

这是工作语法...

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 中将不同类型的查询链接在一起?

谢谢。

4

3 回答 3

4

不要引用 q 和 c:

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

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

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

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

如果您只想为 like 位包含 % 通配符,您可以执行以下操作:

Model.where('name like ?', "%#{q}%").where('value > ?', c)
于 2012-08-21T07:30:20.797 回答
1

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

于 2012-08-21T07:33:52.357 回答
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)
于 2012-08-21T07:50:10.020 回答