6

それぞれが同じ親モデルを持つ必要がある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

助言がありますか?それとも、パーツを作成した後に変更する必要がありますか?

ありがとうございました

4

2 に答える 2

8

コールバックでこれを行うことができると思います:

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

参照: Factory 内で 2 つの関連付けを取得して、別の関連付けを共有する

于 2012-10-24T02:30:46.880 に答える