ruby-on-rails Rails4是否支持OR查询

ujv3wf0j  于 2022-12-15  发布在  Ruby
关注(0)|答案(6)|浏览(154)

因此,在Rails4中,添加了使用not查询这一长期期望的特性。

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

字符串
or查询是否也有类似的支持,或者他们是否计划这样做,我在浏览发行说明时没有找到任何东西。
显然我试过了

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

但这行不通。

ijnw1ujt

ijnw1ujt1#

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

就是你在活动记录中是怎么做的。
使用“Rails-y”语法不可能复制任意的SQL查询,但您可以始终只传入文本sql。
因此,您还可以执行以下操作:

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

k4emjkb12#

这在Rails 5中是有效的:

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

Code example in Rails's source .

ego6inou

ego6inou3#

最常见的替代方法是@gregates
最近在rails源代码中有拉取请求
Add #any_of query method to active_record向活动记录添加或功能
贡献者已经创建了一个gem以防其不被接受
兼容其导轨3.2和4
https://github.com/oelmekki/activerecord_any_of
我还没有试过,但很快就希望使用它看起来不错。

ru9i0ody

ru9i0ody4#

我知道这是一个老线索,但任何其他人寻找这个问题的解决方案可能会发现以下代码很有帮助:

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

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

6vl6ewon

6vl6ewon5#

看来rails master分支现在支持OR查询了。https://github.com/rails/rails/pull/16052
我认为它将在下一个主要版本的框架中。

oymdgrw7

oymdgrw76#

Rails 5将支持它,但您可以在Rails 4.2中使用此后端口:https://github.com/Eric-Guo/where-or

相关问题