Estou me perguntando qual é a melhor maneira de exibir registros exclusivos de um has_many, por meio de relacionamento no Rails3.
Tenho três 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 eu queira listar todos os produtos que um cliente pediu em sua página do programa.
Eles podem ter pedido alguns produtos várias vezes, então estou usando counter_cache para exibir em ordem decrescente de classificação, com base no número de pedidos.
Mas, se eles solicitaram um produto várias vezes, preciso garantir que cada produto seja listado apenas uma vez.
@products = @user.products.ranked(:limit => 10).uniq!
funciona quando há vários registros de pedido para um produto, mas gera um erro se um produto foi pedido apenas uma vez. (classificado é uma função de classificação personalizada definida em outro lugar)
Outra alternativa é:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Não tenho certeza de estar na abordagem certa aqui.
Alguém mais abordou isso? Quais problemas você encontrou? Onde posso encontrar mais informações sobre a diferença entre .unique! e DISTINTO ()?
Qual a melhor forma de gerar uma lista de registros únicos através de um has_many, através de relacionamento?
obrigado