2010-08-13 25 views
0

我有一个模型,如下所示:如何在Rails中使用ActiveRecord获取一条记录而不是重复项?

Campaign 
    has_many :companies, :through => :contacts 

有同一家公司多次接触。我只想要每个公司的一个实例。

我试过如下:

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

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

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

回答

5

当您使用:through,它通常是有用的使用:uniq选项,这样你就不会重复结果

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

甜,从来没有见过这种选择之前,谢谢:) – Angela 2010-08-14 04:21:28

1

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

高效,在我看来,要做到这一点正确的方法是:

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

它可能不会很漂亮,但它会得到你想要的东西,将不使用额外的内存,并会要快得多。

+0

有趣的是,我可以给一个尝试....我更喜欢保持东西在SQL – Angela 2010-09-24 03:44:25

相关问题