2011-11-01 56 views
1

用户has_many:产品 产品has_many:赞最有效的嵌套顺序,组合,总数计数?

我想根据用户喜欢的总数降序为用户返回记录。

例如 用户1具有产物(A,B,C) A = 4顶,B = 2所喜欢,C = 1等,总计= 7个喜欢

用户2具有产品(d,E) d = 4喜欢,E = 6个所好,总计= 10喜欢

用户3具有产品(F,G,H,I) F,G,H,I)=(各1等,总计= 4个喜欢

结果= >用户2,用户1,用户3

这样做的最有效方法是什么?

回答

1

我们必须在这里使用计数器缓存来跟踪每个产品的数量。为此,我们需要在产品表中添加一个新的整数类型的整数类型likes_count。

参考:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

用户模型:

class User < ActiveRecord::Base 
has_many :products 
scope :popular_products, joins(:products).group("user_id"). 
     order("sum(likes_count) DESC") 
end 

产品型号:

class Product < ActiveRecord::Base 
    belongs_to :user 
    has_many :likes 
end 

就像型号:

class Like < ActiveRecord::Base 
    belongs_to :product , :counter_cache => true 
end