0

私は次のようなモデルを持っています:

Campaign
  has_many :companies, :through => :contacts

同じ会社との連絡が多い。各企業のインスタンスが1つだけ必要です。

私は次のことを試しました:

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

しかし、これは私が信じるすべての連絡先のすべての会社を私に示しています。少なくとも、それが出力のようになります。

会社のインスタンスが1つだけ追加されていることを確認するにはどうすればよいですか?

4

2 に答える 2

5

を使用する場合:through、通常はこの:uniqオプションを使用すると便利なので、結果が繰り返されることはありません。

has_many :companies, :through => :contacts, :uniq => true
于 2010-08-13T16:30:45.663 に答える
1

「j」によって現在受け入れられているソリューション。動作しますが、SQLではなくRubyで重複が削除されるため、非常に非効率的です。実際には.uniq!、返された結果に対して実行されます。

私の意見では、これを行うための効率的で適切な方法は次のとおりです。

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

それほどきれいではないかもしれませんが、必要なものが得られ、余分なメモリを使用せず、はるかに高速になります。

于 2010-09-23T23:13:16.843 に答える