Je me demande quelle est la meilleure façon d'afficher les enregistrements uniques à partir d'un has_many, la relation d'aide dans Rails3.
J'ai trois modèles:
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
Disons que je veux la liste de tous les produits d'un client a commandé sur leur page.
Ils peuvent avoir commandé des produits à plusieurs reprises, donc je suis en utilisant counter_cache pour afficher en ordre décroissant, en fonction du nombre de commandes.
Mais, s'ils ont commandé un produit à plusieurs reprises, j'ai besoin de s'assurer que chaque produit est seulement une fois que.
@products = @user.products.ranked(:limit => 10).uniq!
fonctionne lorsqu'il y a plusieurs enregistrements de commande pour un produit, mais génère une erreur si un produit a été commandé une fois. (classement est fonction de tri personnalisé défini par ailleurs)
Une autre alternative est la suivante:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Je ne suis pas convaincu que je suis sur la bonne approche ici.
Quelqu'un d'autre a abordé ce problème? Quelles questions avez-vous contre? Où puis-je trouver plus d'information à propos de la différence entre les deux .unique! et DISTINCT()?
Quelle est la meilleure façon de générer une liste de dossiers uniques par le biais d'un has_many, la relation d'aide?
Merci