Rails 4是否支持OR查询

时间:2013-06-19 13:41:57

标签: ruby-on-rails ruby-on-rails-4

因此,在Rails 4中添加了使用not查询所需的长期功能。

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

是否为or查询添加了类似支持,或者他们是否计划进行此类查询。浏览发行说明我找不到任何东西。

显然我试过

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

但这不起作用。

7 个答案:

答案 0 :(得分:90)

Article.where(title: ['Rails 3', 'Rails 4'])就是你在Active Record中的表现方式。

使用“Rails-y”语法无法复制任何任意SQL查询。但是你总是可以直接传入文字sql。

所以你也可以这样做:

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

答案 1 :(得分:34)

这现在适用于Rails 5:

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

Code example in Rails's source

答案 2 :(得分:12)

最常见的替代方案已经由@gregates

回答

最近在rails source中有pull请求

Add #any_of query method to active_record 哪个添加或功能到activerecord

贡献者已经创建了一个未被接受的宝石

其轨道3.2和4兼容

https://github.com/oelmekki/activerecord_any_of

我还没有尝试过,但很快就希望用它看起来对我好。

答案 3 :(得分:5)

我知道这是一个旧线程,但是其他寻找此问题解决方案的人可能会发现此代码很有用:

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

也许这会帮助你让某人朝着正确的方向前进而不必冒险注入SQL。

答案 4 :(得分:4)

似乎rails master分支现在支持OR查询。 https://github.com/rails/rails/pull/16052

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

答案 5 :(得分:3)

Rails 5将支持它,但您可以将此反向端口用于Rails 4.2:https://github.com/Eric-Guo/where-or

答案 6 :(得分:1)

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

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

这导致以下SQL查询:

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