这些是2个简单的模型:
class Post < ActiveRecord::Base
has_one :asset, :dependent => :destroy
validates :asset, presence: true
end
class Asset < ActiveRecord::Base
belongs_to :post
end
我正在尝试创建一个像这样的工厂:
factory :post do
# fields...
asset { FactoryGirl.create(:asset) }
end
factory :asset do
# fields...
post
end
但是,运行规范会进入循环。
我也试过这个:
factory :post do
# fields...
before(:create) do |post, evaluator|
FactoryGirl.create_list(:asset, 1, post: post)
end
end
但是最终出现在“验证失败: Assets 不能为空”。
我如何代表我的情况?
最佳答案
我使用after(:build)回调解决了这个问题。
factory :post do
# fields...
after(:build) do |post|
post.asset ||= FactoryGirl.build(:asset, :post => post)
end
end
factory :asset do
# fields...
after(:build) do |asset|
asset.post ||= FactoryGirl.build(:post, :asset => asset)
end
end
通过这种方式,将在保存拥有的类之前创建关联的对象,因此验证通过。
关于ruby-on-rails - FactoryGirl,has_one关联和验证失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17034423/