我正在试图弄清楚如何编写属于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