鉴于这些Rails模型:
class Human
has_many :pets
has_many :vet_visits
end
class Pet
belongs_to :human
has_many :vet_visits
end
class VetVisit
belongs_to :human
belongs_to :pet
end
我需要一个rspec工厂来制作VetVisit。但是:
FactoryGirl.define do
factory :vet_visit, class: 'VetVisit' do
association :human, factory: :human
association :pet, factory: :pet
end
factory :pet, class: 'Pet' do
association :human, factory: :human
end
factory :human, class: 'Human' do
after(:create) do | human |
create :pet, human: human
end
end
end
导致vet_visit与人和宠物彼此不是彼此的宠物/人。
如何创建一个工厂,该工厂创建一个vet_visit,其中有一个人类的宠物与vet_visit引用的人类相同?
为了清除任何疑问,我实际上并没有制作一个vetinary系统,这是一个抽象的例子,来自一个更复杂的系统,删除了人类并且在代码中做vet_visit.pet.human是不合适的
答案 0 :(得分:2)
如果您需要兽医访问,指的是特定宠物和人类,请在您的规范文件中构建它。
let(:vet_visit) { FactoryGirl.create(:vet_visit, human: human, pet: pet) }
这假设你已经在spec文件中创建了一个人类和宠物。
答案 1 :(得分:0)
我认为您需要使用inverse_of
关系才能实现此目的。
创建人类时,会创建宠物。那只宠物属于人类,但人类并不了解宠物。
看看这里:http://guides.rubyonrails.org/association_basics.html#bi-directional-associations