获得两个活动记录关系的交集,rails

时间:2016-07-22 20:41:49

标签: ruby-on-rails ruby activerecord intersect

在这个rails应用程序中,我有一个控制器调用的方法,它接受站点和过滤器数组的活动记录关系,该方法返回关系中具有数组中所有过滤器的所有站点。这是方法:

def filter_sites(sites, filters)

  if filters.count > 0
    filterable = sites.tag_join
    filters.each { |f| sites = sites & filterable.with_tag(f) }
  end 

  return sites
end

以下是使用的范围:

def self.tag_join
  joins(:tags).distinct
end

def self.with_tag(tag_id)
  where('sites_tags.tag_id = ?',tag_id)
end

这是正常运行但问题是它返回一个数组。我的问题是;是否有更有效的方法或编写此方法并返回活动记录关系?稍后在代码中,需要进一步查询链接。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

你可以做merge。将返回array,但这是一个干净的电话,方便且易于维护。