我正在使用Rails 3.2并且我有一个数据库表,我想在其中找到符合以下条件的所有行:
a = true且b = true且(0 我可以拥有类似的内容: Route.where(:a => true,
:b => true,
:c => 0..1 OR :d=1
).all
答案 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运算符的行为类似。