class Topic < ActiveRecord::Base
belongs_to :success_criterion
end
class SuccessCriterion < ActiveRecord::Base
has_many :topics, dependent: :restrict_with_error
end
SuccessCriterion
管理topics_counter
计数器,但在使用以下工厂时似乎无法更新:
FactoryGirl.define do
factory :topic do
success_criterion { create(:success_criterion) }
title 'Topic test title'
intro 'Topic test intro'
outro 'Topic test outro'
end
end
看看以下内容:
@topic = create :topic
@success_criterion = @topic.success_criterion
@success_criterion.topics.any?
=> false
@success_criterion.topics_count
=> 0
@success_criterion.topics.count
=> 1
这里发生了什么?如果没有topics_counter
字段,它会按预期工作,因此看起来FactoryGirl在执行success_criterion { create(:success_criterion) }
时似乎没有更新计数器。
答案 0 :(得分:1)
您必须在模型中启用counter_cache
。
将以下内容添加到Topic
模型中:
class Topic < ActiveRecord::Base
belongs_to :success_criterion, counter_cache: true
end
确保topics_count
模型中存在SuccessCriterion
列。
Ryan Bates在他的一个RailsCasts中很好地描述了这个特征。