Мне интересно, как лучше всего отобразить уникальные записи из has_many через отношения в Rails3.
У меня есть три модели:
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, через отношения?
Спасибо