嵌套顺序,组,计数总和最有效的方法?

时间:2011-11-01 04:19:52

标签: ruby-on-rails activerecord

用户has_many:产品 产品has_many:喜欢

我希望根据用户获得的喜欢总数按降序返回记录。

e.g。 用户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 个答案:

答案 0 :(得分:1)

我们必须在此处使用计数器缓存来跟踪每个产品的类似数量。为此,我们需要在products表中添加一个类型integer的新列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