0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ActiveRecord】typeカラムでエラーが出たので、原因と対処方法をまとめてみた(備忘録)

Last updated at Posted at 2021-05-26

はじめに

ActiveRecordで、「type」というカラムをもつテーブルを作成した際に、エラーになったので、原因を備忘録として残します。

現状

  • Exerciseモデルを作成した際に、「運動の種類」=「type」でカラムを作成。

  • エクセルサイズの種類を登録した際に、下記のエラーになっている状況。

スクリーンショット 2021-05-26 16.16.19.png

めちゃくちゃ怒られてますね:relaxed:

原因

  • Single Table Inheritanceという1つのテーブルを複数のModelで利用する仕組みとして「type」という名前をActiveRecordが利用するからみたいです。

対処法

  • 下記のRailsガイドにも記載されているとおり、違うカラム名へ変更します。

これらのカラム名は必須ではありませんが、Active Recordで予約されています。特別な理由のない限り、これらの予約済みカラム名の利用は避けてください。たとえば、typeという語はテーブルでSTI(Single Table Inheritance)を指定するために予約されています。STIを使わない場合であっても、予約語より先にまず「context」などのようなモデルのデータを適切に表す語を検討してください。

  • migrationファイルを作成。
$ rails g migrate rename_[変更前のカラム名]_column_to_[モデル名(複数形)]
  • 今回は、exercisesモデルのtypeを変更します。
$ rails g migration rename_type_column_to_exercises
  • migrationファイルを編集。
    生成されたファイルにchangeメソッドを追加し、変更したいカラム名を記述する。rename_column :テーブル名, :変更前のカラム名, :変更後のカラム名
    今回は、「運動の種類」から「運動の名前」へ変更します。
def change
  rename_column :exercises, :type, :name
end
  • DBに反映するため、下記コマンドを実行します。
$ rails db:migrate
  • 先程のエラーは、解消され、「type」がありませんというエラーに変わります。typeにしていたところをnameへ変更します。

スクリーンショット 2021-05-26 16.52.19.png

  • 無事にexercises#indexが表示されました!

スクリーンショット 2021-05-26 16.54.01.png

まとめ

今回のエラーは、初めてだったので、「おお、何これ?」という感じでしたが、エラー文をしっかり読むと、対処法が示されていたので、いつもよりサクッと解決できました!予約語という聞き慣れない言葉だったので、とても勉強になりました:relaxed:

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?