FactoryGirl不会更新关联对象

时间:2015-12-08 11:37:26

标签: ruby-on-rails counter factory-bot

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) }时似乎没有更新计数器。

1 个答案:

答案 0 :(得分:1)

您必须在模型中启用counter_cache

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

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

确保topics_count模型中存在SuccessCriterion列。

Ryan Bates在他的一个RailsCasts中很好地描述了这个特征。