2011-11-01 51 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