我有一个范围(其中title
是一个数组)
scope :with_label, ->(title) { joins(:labels).where(labels: { title: title }) }
默认情况下,这会执行AND
查询。如何才能进行OR
查询?我似乎无法找到任何这方面的例子。
我相信这是生成的SQL:
Label Load (0.1ms) SELECT "labels".* FROM "labels" WHERE "labels"."project_id" = $1 AND "labels"."title" = $2 ORDER BY "labels"."title" ASC LIMIT 1 [["project_id", 8], ["title", "label1,label2,label3"]]
答案 0 :(得分:2)
Rails / ActiveRecord仅支持OR
次查询in Rails 5。在早期版本中,您需要使用SQL字符串来实现OR
查询:
Widget.where("name = ? OR name = ?", "foo", "bar") # postgres
当有很多可能性时,使用IN
查询可以更有效地完成同样的事情,该查询是通过将具有多个元素的数组传递给#where
方法在ActiveRecord中生成的:< / p>
arr = ["foo", "bar", "baz"]
Widget.where(name: arr)
至于您发布的SQL输出:
Label Load (0.1ms) SELECT "labels".* FROM "labels" WHERE "labels"."project_id" = $1 AND "labels"."title" = $2 ORDER BY "labels"."title" ASC LIMIT 1 [["project_id", 8], ["title", "label1,label2,label3"]]
这里的AND
来自于对product_id
以及title
进行查询的事实,而不是因为与title
有任何关系。