如何在Rails 3 ActiveRecord中进行OR查询。我找到的所有示例都只有AND查询。
Edit: OR方法从Rails 5开始可用。看到ActiveRecord:: QueryMethods
如何在Rails 3 ActiveRecord中进行OR查询。我找到的所有示例都只有AND查询。
Edit: OR方法从Rails 5开始可用。看到ActiveRecord:: QueryMethods
当前回答
你可以这样做:
Person.where("name = ? OR age = ?", 'Pearl', 24)
或者更优雅一点,安装rails_or gem并像这样做:
Person.where(:name => 'Pearl').or(:age => 24)
其他回答
我刚刚从客户端工作中提取了这个插件,它可以让你将作用域与。or结合起来。例如post .published.or. authorred_by (current_user)。Squeel (MetaSearch的更新实现)也很棒,但不支持OR作用域,因此查询逻辑可能有点多余。
我想添加这是一个解决方案搜索一个ActiveRecord的多个属性。自
.where(A: param[:A], B: param[:B])
会搜索A和B。
只要在条件中添加一个OR
Model.find(:all, :conditions => ["column = ? OR other_column = ?",value, other_value])
如果你想在一个列的值上使用OR操作符,你可以传递一个数组到.where, ActiveRecord将使用IN(value,other_value):
Model.where(:column => ["value", "other_value"]
输出:
SELECT `table_name`.* FROM `table_name` WHERE `table_name`.`column` IN ('value', 'other_value')
这应该在单个列上实现与OR相同的效果
用服装
t = Post.arel_table
results = Post.where(
t[:author].eq("Someone").
or(t[:title].matches("%something%"))
)
结果SQL:
ree-1.8.7-2010.02 > puts Post.where(t[:author].eq("Someone").or(t[:title].matches("%something%"))).to_sql
SELECT "posts".* FROM "posts" WHERE (("posts"."author" = 'Someone' OR "posts"."title" LIKE '%something%'))