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.
中很好地描述了此功能
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.
中很好地描述了此功能