2012-02-22 56 views
5

我工作到counter_cache添加到我的模型:一個counter_cache可以和has_many一起使用嗎?

用戶(ID,org_id) [機構(ID,USERS_COUNT)

但得到以下錯誤:ArgumentError (Unknown key(s): counter_cache):

class Org < ActiveRecord::Base 
    has_many :users, :counter_cache => true 

class User < ActiveRecord::Base 
    belongs_to :org 

任何想法是什麼設置錯誤。我希望Org.users_count爲該組織中的用戶返回counter_cache?

回答

14

這不起作用。你必須在counter_cache移動到belongs_to的:

class User < ActiveRecord::Base 
    belongs_to :org, :counter_cache => true 
end 

而一個users_count字段添加到Org模型,然後Rails會更新該字段爲您服務。不要忘記在遷移中添加:default=> 0,否則它將無法正常工作。

如果你在你的應用程序已經有一些數據,並要同步計數器,可以運行(在遷移之後),像下面這樣:

Org.find(:all).each do |o| 
    Org.update_counters o.id, :users_count => o.users.count 
    end 
+0

謝謝,這似乎已經幫助。觸發重置現有記錄的最佳方法是什麼?如果我已經運行遷移,我可以將它作爲rake任務運行嗎? – AnApprentice 2012-02-22 18:35:44

+1

我編輯了這個問題。你可以用'rails runner'運行該代碼 – lucapette 2012-02-22 18:40:26

+1

@AnApprentice如果答案解決了你的問題,請將它標記爲已接受;) – lucapette 2012-02-23 09:47:20

相關問題