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'))