如何在Rails 3 ActiveRecord中进行OR查询。我找到的所有示例都只有AND查询。

Edit: OR方法从Rails 5开始可用。看到ActiveRecord:: QueryMethods


当前回答

Rails/ActiveRecord的更新版本可能原生支持此语法。它看起来类似于:

Foo.where(foo: 'bar').or.where(bar: 'bar')

如此拉请求https://github.com/rails/rails/pull/9052中所述

现在,只要坚持下面的方法就可以了:

Foo.where('foo= ? OR bar= ?', 'bar', 'bar')

更新:根据https://github.com/rails/rails/pull/16052, or特性将在Rails 5中可用

更新:特性已经合并到Rails 5分支

其他回答

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}

Rails/ActiveRecord的更新版本可能原生支持此语法。它看起来类似于:

Foo.where(foo: 'bar').or.where(bar: 'bar')

如此拉请求https://github.com/rails/rails/pull/9052中所述

现在,只要坚持下面的方法就可以了:

Foo.where('foo= ? OR bar= ?', 'bar', 'bar')

更新:根据https://github.com/rails/rails/pull/16052, or特性将在Rails 5中可用

更新:特性已经合并到Rails 5分支

使用activerecord_any_of gem,您可以编写

Book.where.any_of(Book.where(:author => 'Poe'), Book.where(:author => 'Hemingway')

我想添加这是一个解决方案搜索一个ActiveRecord的多个属性。自

.where(A: param[:A], B: param[:B])

会搜索A和B。

你可以这样做:

Person.where("name = ? OR age = ?", 'Pearl', 24)

或者更优雅一点,安装rails_or gem并像这样做:

Person.where(:name => 'Pearl').or(:age => 24)