Flo*_*ahl 10 ruby-on-rails associations factory-bot
我有四个型号:User,Product,Ownership和Location.User并Product拥有一个Location,Location属于User和Product(多态模型).
我想用来FactoryGirl创建与其所有者具有相同位置的产品.
factory :location do
sequence(:address) { |n| "#{n}, street, city" }
end
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
Run Code Online (Sandbox Code Playgroud)
我在产品模型文件中创建了一个方法来检索产品的所有者product.owner.
我想调整产品工厂,以便更换因子位置product.owner.location.我怎样才能做到这一点?
我想这样使用它:
首先,我创建一个用户
FactoryGirl.create(:user)
Run Code Online (Sandbox Code Playgroud)
后来我创造了一个产品
FactoryGirl.create(:product)
Run Code Online (Sandbox Code Playgroud)
当我把它们联系起来时
FactoryGirl.create(:current_ownership, product: product, user: user)
Run Code Online (Sandbox Code Playgroud)
我希望我的产品的位置成为他的主人之一.
jvn*_*ill 10
使用以下代码.
factory :user do
sequence(:name) { |n| "Robot #{n}" }
sequence(:email) { |n| "numero#{n}@robots.com"}
association :location, factory: :location
factory :user_with_product do
after(:create) do |user|
create(:product, location: user.location)
end
end
end
Run Code Online (Sandbox Code Playgroud)
要创建记录,只需使用user_with_product工厂.
更新:
在回答您的问题更新时,您可以after(:create)向ownership工厂添加回调
factory :ownership do
association :user, factory: :user
association :product, factory: :product
after(:create) do |ownership|
# update ownership.user.location here with ownership.user.product
end
end
Run Code Online (Sandbox Code Playgroud)
这个问题是您当前的关联设置.由于location属于用户或产品,因此外键位于其中.所以a location不能同时属于用户和产品.
| 归档时间: |
|
| 查看次数: |
11540 次 |
| 最近记录: |