如何在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)
其他回答
我想添加这是一个解决方案搜索一个ActiveRecord的多个属性。自
.where(A: param[:A], B: param[:B])
会搜索A和B。
我刚刚从客户端工作中提取了这个插件,它可以让你将作用域与。or结合起来。例如post .published.or. authorred_by (current_user)。Squeel (MetaSearch的更新实现)也很棒,但不支持OR作用域,因此查询逻辑可能有点多余。
Rails 5附带了一个or方法。(链接到文档)
该方法接受ActiveRecord::Relation对象。例如:
User.where(first_name: 'James').or(User.where(last_name: 'Scott'))
在Rails 3中,应该是这样
Model.where("column = ? or other_column = ?", value, other_value)
这也包括原始sql,但我不认为有一种方式在ActiveRecord做或操作。你的问题不是新手的问题。
Rails 5添加了或,所以现在在Rails版本大于5的应用程序中更容易做到这一点:
Model.where(column: value).or(Model.where(other_column: other_value)
这也可以处理nil值
MetaWhere插件非常棒。
轻松混合OR's和and 's,任何关联的连接条件,甚至指定OUTER join 's!
Post.where({sharing_level: Post::Sharing[:everyone]} | ({sharing_level: Post::Sharing[:friends]} & {user: {followers: current_user} }).joins(:user.outer => :followers.outer}