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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Ruby相关文章