我可以像这样链接范围:
scoped = User.where(sex: 'F')
scoped = scoped.where(color: 'blue')
ActiveRecord为第一行生成此SQL:
SELECT COUNT(*) FROM "users" WHERE "users"."sex" = 'F'
第二行的SQL:
SELECT COUNT(*) FROM "users" WHERE "users"."sex" = 'F' AND "users"."color" = 'blue'
在保留初始查询以使其构建超过2行的同时,如何将其从AND
更改为OR
,以便最终结果如下:
SELECT COUNT(*) FROM "users" WHERE "users"."sex" = 'F' OR "users"."color" = 'blue'
答案 0 :(得分:2)
如果没有扩展,除非你使用原始SQL,否则目前Rails是不可能的:
User.where('sex = ? OR color = ?', 'F', 'blue')
In Rails 5, these types of ORs will be supported out of the box.
答案 1 :(得分:0)
如果你使用squeel
gem,你可以这样实现:
User.where(
{ sex: 'F' } |
{ color: 'blue' }
)
但是,由于听起来你需要动态构建查询,我建议你做这样的事情:
queries = [
"sex = 'F'",
"color = 'blue'"
]
User.where(queries.join(" OR "))
使用此方法,您可以根据需要向queries
数组动态添加任意数量的查询。显然,您必须在原始SQL中编写查询,但这是我用ActiveRecord完成此任务的唯一选择。