如何合并两个ActiveRecord查询的结果?

时间:2014-05-13 17:09:29

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我的控制器中有以下代码

@production_versions =
  Version.where(:item_type => Production)
    .where("object like ?", "%miniature_id: #{@miniature.id}%") |
  Version.where(:item_type => Production)
    .where("object_changes like ?", "%miniature_id: #{@miniature.id}%")

返回所有第一个查询结果,后跟所有第二个查询结果。如何将两者合并以使它们显示为一个列表?

1 个答案:

答案 0 :(得分:2)

ActiveRecord没有提供将查询与“或”组合的方法,但您可以在SQL中执行此操作:

@production_versions =
  Version.where(:item_type => Production)
    .where("object like ? or object_changes like ?", 
      "%miniature_id: #{@miniature.id}%", "%miniature_id: #{@miniature.id}%")

除了交叉结果之外,这样做更有效率,因为它只运行一个数据库查询,并且只会实例化每个对象一次,即使它满足两个条件。但是,如果您想确定订单,则应order