或 & 和 在 Rails ActiveRecord where 子句中



我正在使用 Rails 3.2,我有一个数据库表,我想在其中查找与以下条件匹配的所有行:

a = true,b

= true,( 0

我可以有这样的东西吗:

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

我可能是错的,但我认为你不能使用基于 Arel 的 where 函数来形成该查询;你需要自己形成数据库查询字符串。

假设你使用的是SQLite或Postgres:

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

我还没有测试过这段代码,但我怀疑这可能会为你完成这项工作。请注意,这是不太"可移植"的代码;如果更改正在使用的数据库,查询可能会中断。

在 Rails 4 中你也可以

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

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

我认为 Rob 关于 arel 不支持 OR 的说法是对的。从 arel 网站:

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

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

AND 运算符的行为类似。

最新更新