【发布时间】:2016-04-29 18:20:18
【问题描述】:
我可以像这样链接作用域:
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'
【问题讨论】:
-
同意洛根的回答。尝试 squeel 或 arel 以获得更丰富的语法。我们使用 squeel,到目前为止一切顺利。
-
你能详细说明你需要在多行上构建它的原因吗?
-
我需要在多行上构建它,因为我正在迭代
hstore属性中的键数组,并且对于每个键,我想找到所有完全丢失键的记录,或者,如果他们的密钥不是nil或""。这是一个循环。然后我想用OR子句对其进行扩展,以选择所有hstore 属性本身为nil的记录。
标签: ruby-on-rails postgresql activerecord arel