两个活跃记录关系的联盟应该是ruby on rails的另一个活跃记录

May*_*nkS 7 activerecord ruby-on-rails

我需要ActiveRecord::Relation以这样的方式得到两个对象的并集,结果应该是另一个活动的记录关系.我怎么能做到这一点?

Kos*_*sis 8

Rails的更新5

ActiveRecord现在为UNION/ ORqueries 提供内置支持!现在你可以(以下示例是从这篇不错的帖子中获取的.确保你阅读完整帖子了解更多技巧和限制):

Post.where(id: 1).or(Post.where(title: 'Learn Rails'))
Run Code Online (Sandbox Code Playgroud)

或结合having:

posts.having('id > 3').or(posts.having('title like "Hi%"'))
Run Code Online (Sandbox Code Playgroud)

甚至与范围混合:

Post.contains_blog_keyword.or(Post.where('id > 3'))
Run Code Online (Sandbox Code Playgroud)

原始答案如下

我认为AR不提供联合方法.您可以执行原始SQL并使用SQL的UNION或执行2个不同的查询,并将结果合并到Rails中.

或者你可以看一下这些自定义的"hacks": ActiveRecord Query Unionhttps://coderwall.com/p/9hohaa

  • 对@Volte,或者只是使用在`ActiveRecord :: Relation`上定义的方便的`+` (3认同)