或者&并在Rails ActiveRecord where子句中

时间:2012-06-09 06:08:26

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在使用Rails 3.2并且我有一个数据库表,我想在其中找到符合以下条件的所有行:

a = true且b = true且(0

我可以拥有类似的内容:

 Route.where(:a => true,
             :b => true,
             :c => 0..1 OR :d=1
             ).all          

3 个答案:

答案 0 :(得分:14)

我可能错了,但我认为你不能使用基于Arel的where函数形成那个查询;您需要自己构建数据库查询字符串。

假设您使用的是SQLite或Postgres:

Route.where("a = true and b = true and ((c > 0 and c < 1) or d = 1)").all

我没有测试过这段代码,但我怀疑这可能会为你完成这项工作。请注意,这不是“便携”代码;如果您更改了数据库,那么您使用的查询可能会中断。

答案 1 :(得分:11)

在Rails 4中你也可以

Route.where(:a => true,:b => true,:c => [1,2]).all

这将找到c为1或2的位置。

答案 2 :(得分:2)

我认为罗布是正确的,还没有支持OR。来自arel site

尚不支持OR运算符。它会像这样工作:

users.where(users[:name].eq('bob').or(users[:age].lt(25)))

AND运算符的行为类似。