[rails]FactoryGirl::AssociationDefinitionError: Self-referencing association


[まとめ] 現在開催中のKindleセール情報はこちら

FactoryGirl::AssociationDefinitionError: Self-referencing association

のエラーが出た時はFactoryGirl周りのどこかで自己参照が発生してしまっているようです。

例えば、Hogeクラスにクラス名と同名のhogeというカラムも存在している場合に、以下のようなコードを書いたりすると上記のエラーが発生します。

FactoryGirl.define do
  sequence :hoge do |n|  <= :hogeを使ってる
    "test#{n}"
  end

  factory :hoge do  # <= ここでも使ってる
    hoge
  end
end

sequenceとfactoryで同じ名前を使っているのが原因なので、factoryの名前を変えるなりして対応するとエラーが消えます。

FactoryGirl.define do
  sequence :hoge do |n|
    "test#{n}"
  end

  factory :alt_hoge, class: Hoge do  <= 別名に変更
    hoge
  end
end

10/22追記

↑より、↓のようにsequence設定をfactory設定内に移動したほうがシンプルでいい気がしました。

共通で使うようなsequenceだったら↑のようにして別ファイルにまとめておく、とかがいいんですかね。

FactoryGirl.define do
  factory :hoge do
    sequence(:hoge) { |n| "test#{n}" }   <= factory内に移動
  end
end

参考

ruby on rails – FactoryGirl Self-referencing association error – Stack Overflow

[まとめ] 現在開催中のKindleセール情報はこちら