我正在寻找一种舒适的方式来创建一个复兴的工厂。 在我的应用程序中,用户拥有许多软件,我想用“一次性”创建一个具有n个相关软件的用户。 这是我的代码:
FactoryGirl.define do
factory :user do |f|
f.sequence(:username) { |n| "user#{n}" }
end
trait :with_software do
ignore do
n 3
end
after :create do |user, evaluator|
FactoryGirl.create_list :software, evaluator.n, :user => user
end
虽然软件定义如下
factory :software do |f|
f.sequence(:name) { |n| "software#{n}" }
f.association :user
end
当我数字时:
user1 = FactoryGirl.create(:user, :with_software)
FactoryGirls创建一个包含3个相关软件条目的用户。问题是软件名称总是“软件#{n}”。 如何指定唯一的软件名称:user.name +“software#{n}”?
答案 0 :(得分:0)
首先,你所谈论的不是递归,但这并不重要。
您可以通过以下方式实现您的目标:
factory :software do |f| f.sequence(:name) { |n| "software#{n}" } f.association :user trait :with_matching_name do f.name { "#{f.user.name}#{f.name}" } end end factory :user do |f| f.sequence(:username) { |n| "user#{n}" } trait :with_software do ignore do n 3 end end after :create do |user, evaluator| FactoryGirl.create_list :software, evaluator.n, :user => user, :with_matching_name end end
如果有效,你可以试试。