最佳答案
我想知道通过 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!
当一个产品有多个订单记录时可以工作,但是如果一个产品只订购了一次就会产生错误。(rank 是在其他地方定义的自定义排序函数)
另一种选择是:
@products = @user.products.ranked(:limit => 10, :select => "DISTINCT(ID)")
我不确定我的方法是否正确。
还有别人解决过这个问题吗?你遇到了什么问题?我在哪里可以找到更多关于。独一无二!还有什么区别?
What is the best way to generate a list of unique records through a has_many, through relationship?
Thanks