Мені цікаво, який найкращий спосіб відображення унікальних записів з 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, через зв’язок?
Дякую