如何在Rails中使用ActiveRecord获取一条记录而不是重复记录?

时间:2010-08-13 16:15:13

标签: ruby-on-rails models has-many-through

我的模型如下:

Campaign
  has_many :companies, :through => :contacts

同一家公司有很多联系方式。我只想要每个公司的一个实例。

我尝试了以下内容:

@campaign = Campaign.find(params[:id])
@companies = @campaign.companies

但这显示了我相信的每一次接触的所有公司。至少这就是输出的样子。

如何确保只添加公司的单个实例?

2 个答案:

答案 0 :(得分:5)

当您使用:through时,使用:uniq选项通常很有用,因此您不会重复结果

has_many :companies, :through => :contacts, :uniq => true

答案 1 :(得分:1)

“j。”目前接受的解决方案。 工作,但效率非常低,因为它删除了Ruby中的重复项,而不是SQL中的重复项。它实际上只对返回的结果运行.uniq!

有效且在我看来,正确的方法是:

has_many :companies, :through => :contacts, :select => "DISTINCT companies.*"

它可能不那么漂亮,但它会让你得到你想要的东西,不会使用额外的内存,而且会更快。