Me pregunto cuál es la mejor manera de mostrar registros únicos de has_many, a través de la relación en Rails3.
Tengo tres modelos:
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
Digamos que quiero enumerar todos los productos que un cliente ha pedido en su página de presentación.
Es posible que hayan pedido algunos productos varias veces, por lo que estoy usando counter_cache para mostrarlos en orden de clasificación descendente, según la cantidad de pedidos.
Pero, si han pedido un producto varias veces, debo asegurarme de que cada producto solo aparezca una vez.
@products = @user.products.ranked(:limit => 10).uniq!
funciona cuando hay varios registros de pedidos para un producto, pero genera un error si un producto solo se ha pedido una vez. (clasificado es la función de clasificación personalizada definida en otro lugar)
Otra alternativa es:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
No estoy seguro de estar en el enfoque correcto aquí.
¿Alguien más ha abordado esto? ¿A qué problemas te enfrentaste? ¿Dónde puedo encontrar más información sobre la diferencia entre .unique! y DISTINCT ()?
¿Cuál es la mejor manera de generar una lista de registros únicos a través de una relación has_many?
Gracias