ruby-on-rails – FactoryGirl与多个模型的复杂关联

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...