Mi chiedo quale sia il modo migliore per visualizzare record univoci da has_many, attraverso la relazione in Rails3.
Ho tre modelli:
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
Diciamo che voglio elencare tutti i prodotti che un cliente ha ordinato nella sua pagina di presentazione.
Potrebbero aver ordinato alcuni prodotti più volte, quindi sto usando counter_cache per visualizzare in ordine di classificazione decrescente, in base al numero di ordini.
Tuttavia, se hanno ordinato un prodotto più volte, devo assicurarmi che ogni prodotto sia elencato una sola volta.
@products = @user.products.ranked(:limit => 10).uniq!
funziona quando sono presenti più record di ordine per un prodotto, ma genera un errore se un prodotto è stato ordinato una sola volta. (classificato è una funzione di ordinamento personalizzata definita altrove)
Un'altra alternativa è:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Non sono sicuro di essere sull'approccio giusto qui.
Qualcun altro ha affrontato questo? Quali problemi hai incontrato? Dove posso trovare maggiori informazioni sulla differenza tra .unique! e DISTINCT ()?
Qual è il modo migliore per generare un elenco di record univoci tramite has_many, tramite relazione?
Grazie