undefined method `relation_delegate_class’ for Hoge:Module (NoMethodError)が出た時にみた方がいいもの

Rspecにてテストデータ作成時に、親子関係(relation)となっているモデルの子供のデータを作成時に`undefined method relation_delegate_class'とエラーが出たが、解決に結構苦労したのでメモ

TL;DR

  • belong_to のモデルが複数形になっていないか←単数形にする
  • それでもダメならモデル名を変更

テーブルはAdmin has_many Productの関係の時に RspecFactoryBot.create(:product, admin_id:admin.id)を呼び出した時に

     NoMethodError:
       undefined method `relation_delegate_class' for Admins:Module

が発生する

その1:belong_to確認

自分の場合、原因は

belongs_to :admins

とbelongs_toのモデルが複数形になってた。 こうした時に親子関係の子供のデータを作成用しようとした時にrelation_delegate_classがでることがあるので単数形にしてあげると解決した

belongs_to :admin

その2:モデル名変更

たまにモデル名がRailsの内部ですでに使っている場合があるみたいです。 その1で直らなかったら面倒ですが、モデルとそれを参照している箇所を変える必要がありそうです

Railsでモデル名を変更する

参考

Rails relation_class_for’: undefined methodrelation_delegate_class’ for Sample:Module (NoMethodError) が解決できないとき