用户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
最有效的方法是什么?
答案 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