每周能投入几天 @chareice
谢谢分享!!
问题的原因是由于 activerecord 的 cache 导致的。 我把出问题相关的代码都贴出来:
#issue.rb
class Issue < ActiveRecord::Base
has_one :resolve,:dependent => :destroy
before_create :issue_opened_action
def issue_opened_action
self.resolve.destroy unless self.resolve.nil?
end
#resolve.rb
class Resolve < ActiveRecord::Base
belongs_to :issue
end
#Factories.rb
FactoryGirl.define do
factory :issue do
factory :issue_with_resolve do
after(:create) do |issue|
FactoryGirl.create(:resolve,issue: issue)
end
end
end
罪魁祸首就是 issue_opened_action。 由于 issue 创建完成前调用了 issue_opened_action,此时并没有 resovle 和 issue 关联,所以 issue.resolve 一定为 nil,activerecord 把此值加入 cache,后续即便是创建关联的 resolve,issue.resolve 返回的还是 cache 中的 nil,除非 reload 或者通过 inverse_of.