我正在为我的模型添加一个counter_cache:
用户(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?
答案 0 :(得分:15)
这种方式不起作用。您必须将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