FactoryGirl 不更新关联对象的计数器字段

FactoryGirl doesn't update counter field for associated object

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) }.

时似乎没有更新计数器

您必须在模型中启用 counter_cache

将以下内容添加到您的 Topic 模型中:

class Topic < ActiveRecord::Base
  belongs_to :success_criterion, counter_cache: true
end

确保 topics_count 列存在于您的 SuccessCriterion 模型中。

Ryan Bates 在他的 RailsCasts.

中很好地描述了此功能