所以在Rails 4中,已经加入了使用not
查询的长期期望功能。
Article.where.not(title: 'Rails 3')
是否已经为or
查询添加了类似的支持,或者他们正在计划添加。我通过浏览发布说明找不到任何信息。
显然我已经尝试过了。
Article.where(title: 'Rails 3').or(title: 'Rails 4')
但那并不起作用。
所以在Rails 4中,已经加入了使用not
查询的长期期望功能。
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'")
Article.where( "articles.title = ? OR articles.title = ?", "Rails 3", "Rails 4" )
来避免 SQL 注入。 - Joshua PinterArticle.where("articles.title = '#{some_var}'")
可能会受到SQL注入攻击的威胁,但是 Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")
则不会。 - gregates现在在Rails 5中可以正常工作:
Article.where(title: 'Rails 3').or(Article.where(title: 'Rails 4'))
Article.where(title: ['Rails 3', 'Rails 4'])
。它更加简洁,并且与常见的Article.where(id: [1, 2, 3, 4])
用法相匹配。 - BigRonsuper.or(Article.where(title: 'Rails 4'))
。 - Subtletree最常见的替代方法已经被@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"])
.or
方法。 - Joshua Pinter看起来Rails的主分支现在支持OR查询了。https://github.com/rails/rails/pull/16052
我猜下一个主要版本发布时会包含这个功能。
Article.where(title: 'Rails 3').or(title: 'Rails 4')
,你可以使用rails_or。 - khiav reoy