Rails3の関係を通じて、has_manyからの一意のレコードを表示する最良の方法は何でしょうか。
私には3つのモデルがあります。
class User < ActiveRecord::Base
has_many :orders
has_many :products, :through => :orders
end
class Products < ActiveRecord::Base
has_many :orders
has_many :users, :through => :orders
end
class Order < ActiveRecord::Base
belongs_to :user, :counter_cache => true
belongs_to :product, :counter_cache => true
end
顧客が注文したすべての製品をショーページにリストしたいとします。
一部の製品を複数回注文した可能性があるため、counter_cacheを使用して、注文数に基づいて降順で表示しています。
しかし、彼らが製品を複数回注文した場合、私は各製品が一度だけリストされることを確認する必要があります。
@products = @user.products.ranked(:limit => 10).uniq!
製品に複数の注文レコードがある場合に機能しますが、製品が一度しか注文されていない場合はエラーが生成されます。(ランク付けは別の場所で定義されたカスタムソート関数です)
別の選択肢は次のとおりです。
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
私がここで正しいアプローチをしているとは確信していません。
他の誰かがこれに取り組みましたか?どのような問題に直面しましたか?.uniqueの違いの詳細はどこで確認できますか?およびDISTINCT()?
関係を通じて、has_manyを通じて一意のレコードのリストを生成する最良の方法は何ですか?
ありがとう