因此,在Rails 4中添加了使用not
查询所需的长期功能。
Article.where.not(title: 'Rails 3')
是否为or
查询添加了类似支持,或者他们是否计划进行此类查询。浏览发行说明我找不到任何东西。
显然我试过
Article.where(title: 'Rails 3').or(title: 'Rails 4')
但这不起作用。
答案 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'))
答案 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'))