0

FactoryGirlは初めてです。私は備品の世界から来ました。

私は次の2つのモデルを持っています:

class LevelOneSubject < ActiveRecord::Base
  has_many :level_two_subjects, :inverse_of => :level_one_subject
  validates :name, :presence => true
end

class LevelTwoSubject < ActiveRecord::Base
  belongs_to :level_one_subject, :inverse_of => :level_two_subjects
  validates :name, :presence => true
end

そして、私は工場で次のようなことをしたいと思います:

FactoryGirl.define do
  factory :level_one_subject, class: LevelOneSubject do
    factory :social_sciences do
      name "Social Sciences"
    end
  end

  factory :level_two_subject do
    factory :anthropology, class: LevelTwoSubject do
      name "Anthropology"
      association :level_one_subject, factory: social_sciences
    end

    factory :archaelogy, class: LevelTwoSubject do
      name "Archaelogy"
      association :level_one_subject, factory: social_sciences
    end
  end
end

次に、次のような仕様でファクトリを使用すると、次のようになります。

it 'some factory test' do
  anthropology = create(:anthropology)
end

エラーが発生します:

NoMethodError: undefined method `name' for :anthropology:Symbol

誰かがここで助けることができますか?

工場で関連付けを設定しない場合、このエラーは発生しませんが、level_one_subject_id存在する必要のあるエラーが発生し、次のテストコードのみが機能します。

it 'some factory test' do
  social_sciences = create(:social_sciences)
  anthropology = create(:anthropology, :level_one_subject_id => social_sciences.id)
end

しかし、私は本当に協会のある工場が機能しない理由を知りたいです。フィクスチャを使用すると、これらすべてを無料で手に入れることができました。

4

1 に答える 1