Tôi đang tự hỏi đâu là cách tốt nhất để hiển thị các bản ghi duy nhất từ has_many, thông qua mối quan hệ trong Rails3.
Tôi có ba mô hình:
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
Giả sử tôi muốn liệt kê tất cả các sản phẩm mà khách hàng đã đặt hàng trên trang trưng bày của họ.
Họ có thể đã đặt hàng một số sản phẩm nhiều lần, vì vậy tôi đang sử dụng counter_cache để hiển thị theo thứ tự xếp hạng giảm dần, dựa trên số lượng đơn đặt hàng.
Nhưng, nếu họ đã đặt một sản phẩm nhiều lần, tôi cần đảm bảo rằng mỗi sản phẩm chỉ được liệt kê một lần.
@products = @user.products.ranked(:limit => 10).uniq!
hoạt động khi có nhiều bản ghi đơn hàng cho một sản phẩm, nhưng tạo ra lỗi nếu một sản phẩm chỉ được đặt hàng một lần. (xếp hạng là chức năng sắp xếp tùy chỉnh được xác định ở nơi khác)
Một thay thế khác là:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
Tôi không tự tin rằng tôi đang đi đúng hướng ở đây.
Có ai khác đã giải quyết điều này? Bạn đã đưa ra những vấn đề gì? Tôi có thể tìm hiểu thêm về sự khác biệt giữa .unique ở đâu! và DISTINCT ()?
Cách tốt nhất để tạo danh sách các bản ghi duy nhất thông qua has_many, thông qua mối quan hệ là gì?
Cảm ơn