not
所以在 Rails 4 中添加了使用查询的长期需要的特性。
Article.where.not(title: 'Rails 3')
是否为or
查询添加了类似的支持,或者他们是否计划这样做。通过浏览发行说明,我找不到任何东西。
显然我试过了
Article.where(title: 'Rails 3').or(title: 'Rails 4')
但这不起作用。
not
所以在 Rails 4 中添加了使用查询的长期需要的特性。
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'))
最常见的替代方案已经由@gregates 回答
最近在rails源中有拉取请求
向 active_record添加#any_of
查询方法向
activerecord 添加或功能
贡献者已经创建了一个 gem,以防它不被接受
它的 rails 3.2 和 4 兼容
https://github.com/oelmekki/activerecord_any_of
我还没有尝试过,但很快希望使用它对我来说看起来不错。
我知道这是一个旧线程,但其他任何寻找此问题解决方案的人可能会发现此代码很有帮助:
Article.where(title: ["Rails 3", "Rails 4"])
也许这将帮助您让某人朝着正确的方向前进,而不必冒 sql 注入的风险。
rails master 分支现在似乎支持 OR 查询。https://github.com/rails/rails/pull/16052
我认为它将在下一个主要版本的框架中。
Rails 5 将支持它,但您可以将此 backport 用于 Rails 4.2:https ://github.com/Eric-Guo/where-or
您可以将Squeel用于更复杂的查询:
Article.where{(title == 'Rails 3') | (title == 'Rails 4')}
这将导致以下 SQL 查询:
SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))