【发布时间】:2014-05-11 19:34:19
【问题描述】:
我尝试将 counter_cache 添加到 User 以计算拥有的 Projects。
用户有很多项目,项目有很多用户,但项目属于其中之一。
所以我写了迁移来为 counter_cache 添加额外的计数字段。
评论reset_counter没有问题。
但是User.reset_counters user.id, :projects 引发 NoMethodError: undefined method `counter_cache_column' for nil:NilClass。
项目上的 counter_cache 也工作正常。如果我添加额外的项目,它将增加 projects_count 字段,如果我删除一个 - 减量。
模型
class User < ActiveRecord::Base
has_many :projects, :through => :team_members
has_many :team_members
class TeamMember < ActiveRecord::Base
belongs_to :user
belongs_to :project
class Project < ActiveRecord::Base
has_many :users, :through => :team_members
has_many :team_members
belongs_to :leader, :class_name => :User, :counter_cache => true
class Comment < ActiveRecord::Base
belongs_to :user, :counter_cache => true
迁移
class AddCounters < ActiveRecord::Migration
def up
add_column :users, :comments_count, :integer, :default => 0
add_column :users, :projects_count, :integer, :default => 0
User.reset_column_information
User.find_each do |user|
User.reset_counters user.id, :comments #all fine
User.reset_counters user.id, :projects #raise NoMethodError
#undefined method `counter_cache_column'
#for nil:NilClass
end
end
def down
remove_column :users, :projects_count
remove_column :users, :comments_count
end
end
我尝试从:counter_cache => true 切换到:counter_cache => :projects_count。
同样的事情。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3