Rails3의 관계를 통해 has_many의 고유 레코드를 표시하는 가장 좋은 방법이 무엇인지 궁금합니다.
세 가지 모델이 있습니다.
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를 통해 고유 레코드 목록을 생성하는 가장 좋은 방법은 무엇입니까?
감사