hello-world
webエンジニアのメモ。とりあえずやってみる。

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

公開日時
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

参考


Related #Rails

[rails]ELB使用時にヘルスチェック用のアクションを作成する

ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。

[rails]carrierwaveで保存した画像のurlを取得する

carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。