我试图弄清楚如何编写属于 2 个不同模型的工厂,每个模型都应该具有相同的父模型。这是人为的示例代码:
class User < ActiveRecord::Base
has_many :widgets
has_many :suppliers
attr_accessible :username
end
class Widget < ActiveRecord::Base
belongs_to :user
has_many :parts
attr_accessible :name
end
class Supplier < ActiveRecord::Base
belongs_to :user
has_many :parts
attr_accessible :name
end
class Part < ActiveRecord::Base
belongs_to :supplier
belongs_to :widget
attr_accessible :name
end
这是我到目前为止所拥有的:
factory :user do
name 'foo'
end
factory :widget do
association :user
name 'widget'
end
factory :supplier do
association :user
name 'supplier'
end
factory :part do
association :widget
association :supplier
name 'part'
end
问题在于
part.widget.user != part.supplier.user
它们必须相同。我尝试了以下方法但没有成功:
factory :part do
association :widget
association :supplier, user: widget.user
name 'part'
end
有什么建议?还是必须在创建零件后对其进行修改?
谢谢
最佳答案
我相信你可以用 callback 做到这一点:
factory :part do
association :widget
association :supplier
name 'part'
after(:create) do |part|
user = FactoryGirl.create(:user)
part.widget.user = part.supplier.user = user
end
end
另见:Get two associations within a Factory to share another association
关于ruby-on-rails - FactoryGirl 与多个模型的复杂关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13041924/