我想知道通过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通过关系生成唯一记录列表的最佳方法是什么?
谢谢