我的模型如下:
Campaign
has_many :companies, :through => :contacts
同一家公司有很多联系方式。我只想要每个公司的一个实例。
我尝试了以下内容:
@campaign = Campaign.find(params[:id])
@companies = @campaign.companies
但这显示了我相信的每一次接触的所有公司。至少这就是输出的样子。
如何确保只添加公司的单个实例?
答案 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.*"
它可能不那么漂亮,但它会让你得到你想要的东西,不会使用额外的内存,而且会更快。