我有医院和患者模型。医院与病人有很多关系。我在医院模型validates :patients, :presence => true
中进行了验证检查。添加此验证检查后,用于控制器的rspec失败,这只是在创建医院对象。我试图建立一家可以制造医院和病人的工厂,但到目前为止还没有运气。这是我到目前为止尝试过的。
FactoryBot.define do
factory :hospital do
hospital_id { Faker::Crypto.unique.md5 }
name { 'something' }
departments { 'some description' }
after(:create) do |hospital|
create(:patient, patient_id: hospital.id)
end
end
end
知道我在做什么错吗?
答案 0 :(得分:0)
factory :hospital do
after :create do |hospital|
create :hospital, patient: patient
end
end
这是一个不错的备忘单:https://devhints.io/factory_bot
答案 1 :(得分:0)
就像我在评论中说的那样,这种验证可能不会很有帮助。但是我认为他们唯一的方法就是在一次save
通话中节省医院和患者。因此,您可能需要在保存医院之前将未保存的患者加入医院协会。 Rails将自动保存未保存的关联。
尝试一下:
FactoryBot.define do
factory :hospital do
hospital_id { Faker::Crypto.unique.md5 }
name { 'something' }
departments { 'some description' }
before(:create) do |hospital|
build(:patient, hospital: hospital)
end
end
end
答案 2 :(得分:0)
我以前做过这样的事情;不再记得了,但是您可以尝试以下吗?
FactoryBot.define do
factory :hospital do
# ...
after(:build) do |hospital|
hospital.patients << build(:patient, hospital: hospital)
# I think this needs to be assigned directly to the `hospital` object itself so that it shares the same memory space
# when `save` is called on `hospital`, the `.patients` also get `save`d
end
end
end
如果上述方法不起作用,您可以试试吗?
FactoryBot.define do
factory :hospital do
# ...
after(:build) do |hospital|
hospital.patients.build(
attributes_for(:patient, hospital: hospital)
)
end
end
end