counter_cache可以和has_many一起使用吗?

时间:2012-02-22 18:22:56

标签: ruby-on-rails ruby-on-rails-3

我正在为我的模型添加一个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?

1 个答案:

答案 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