👏
【Rails】typeカラムを使ったらエラーが出た件
外部向けAPIを作成している際に、「type」というカラムを作成した。
そのテーブルにレコードを登録すると、以下のようなエラーが出た。
ActiveRecord::SubclassNotFound: Invalid single-table inheritance type: xxxxxxxxx is not a subclass of table_name
何が起きたのか。
chatGPTくん曰く...
エラーメッセージは、Railsアプリケーションのシングルテーブル継承(STI)の階層に問題があることを示しています。
具体的には、table_nameのサブクラスであるxxxxxxxxxというクラスが定義されているようですが、ActiveRecordがtable_nameクラスを見つけることができないということです。
このエラーを修正するには、次のことを確認する必要があります。
table_nameクラスが定義され、Railsアプリケーションに適切に読み込まれていることを確認してください。クラスが定義されているファイルを手動で読み込んでみて、問題が解決するかどうか確認できます。
継承の階層が正しく設定されていることを確認してください。特に、xxxxxxxxxクラスがtable_nameクラスを正しく継承していることを確認してください。
逆にわかりにくいような。。。でもヒントはSTIですね
結局なんなのか
STI(Single Table Inheritance)という1つのテーブルを複数のModelで利用する仕組みとして"type"という名前をActiveRecordが利用するため、それが影響して出たエラーっぽい。
要するに、エラーを見ると"type"をrenameしろと。
どうすればいいのか
カラムのリネームなんてしなくても全く問題ない。
該当のテーブルのモデルに以下を追記してやりましょう。
self.inheritance_column = :_type_disabled
まとめ
Rails実践ガイドでもtypeカラムを使った実装方法が載ってたような気がします。
Rails側が用意してくれるtypeカラムについて興味がある方は、ぜひ読んでみて!
Discussion