我有三种模式:用户,产品和所有权。所有权属于用户和产品。产品和用户拥有许多所有权。
我使用FactoryGirl gem创建了以下工厂:
factory :user do
sequence(:name) { |n| "Robot #{n}" }
sequence(:email) { |n| "numero#{n}@robots.com"}
association :location, factory: :location
end
factory :product do
sequence(:name) { |n| "Objet #{n}" }
association :location, factory: :location
end
factory :ownership do
association :user, factory: :user
association :product, factory: :product
end
我这样使用它:
let(:user) { FactoryGirl.create(:user) }
let(:product) { FactoryGirl.create(:product) }
let(:ownership) { FactoryGirl.create(:current_ownership, user: user, product: product) }
但我想改善我的工厂,为了做到这一点:
let(:user) { FactoryGirl.create(:user) }
let(:product) { FactoryGirl.create(:product, owner: user) }
你知道怎么做吗?
答案 0 :(得分:0)
你可以使用工厂女孩after_create回调:
FactoryGirl.define do
factory :product do
# ...
ignore do
owner nil
end
after :create do |product, ev|
if ev.owner
create :ownership, user: ev.owner, product: product
end
end
end
end
这样就可以配置工厂了,你可以将所有者属性传递给它。 ignore块确保此属性不会传递给对象的构造函数,但您可以在工厂女孩的回调中使用它。
您可以找到有关工厂女孩回调here的更多信息。