Rails 4是否支持OR查询?

所以在Rails 4中,增加了使用not查询的长期需求function。

 Article.where.not(title: 'Rails 3') 

是否添加了类似的支持or查询,或者他们是否打算制作。 浏览发行说明找不到任何内容。

显然我试过了

 Article.where(title: 'Rails 3').or(title: 'Rails 4') 

但是这不起作用。

Article.where(title: ['Rails 3', 'Rails 4'])是你如何在Active Record中做的。

使用“Rails-y”语法不可能复制任何任意的SQL查询。 但是你总是可以传入字面的sql。

所以你也可以这样做:

 Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'") 

这现在可以在Rails 5中使用:

 Article.where(title: 'Rails 3').or(Article.where(title: 'Rails 4')) 

Rails源代码示例

最常见的select已经由@gregates回答了

最近在rails源码中有pull请求

#any_of查询方法添加到active_record其中增加或functionactiverecord

贡献者已经创build了一个不被接受的gem

其导轨3.2和4兼容

https://github.com/oelmekki/activerecord_any_of

我还没试过,但很快就想用它看起来不错。

看来,铁路主分支现在支持OR查询。 https://github.com/rails/rails/pull/16052

我认为这将是在下一个主要版本的框架。

Rails 5将支持它,但是你可以使用这个backport的Rails 4.2: https : //github.com/Eric-Guo/where-or

我知道这是一个古老的线程,但其他人正在寻找这个问题的解决scheme可能会发现这个代码有帮助:

 Article.where(title: ["Rails 3", "Rails 4"]) 

也许这会帮助你让一个人朝着正确的方向前进,而不用担心sql注入的风险。

您可以使用Squeel进行更复杂的查询:

 Article.where{(title == 'Rails 3') | (title == 'Rails 4')} 

这会导致以下SQL查询:

 SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))