2010-08-13 24 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

相關問題