【发布时间】:2011-08-16 08:11:02
【问题描述】:
我想知道通过 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 之间区别的更多信息!和不同()?
通过has_many,通过关系生成唯一记录列表的最佳方法是什么?
谢谢
【问题讨论】:
标签: ruby-on-rails unique distinct ruby-on-rails-3