【Ruby on Rails】migration index too long なエラーを解決
4040 ワード
環境
- Ruby 2.6.3
- Ruby on Rails 6.0.1
- PostgreSQL 10
発生状況
今回のエラーが起きたマイグレーションファイル
class CreateFooBarExampleRegistrations < ActiveRecord::Migration[6.0]
def change
create_table :foo_bar_example_registrations do |t|
t.references :parent_example_table_name, null: false, foreign_key: true
t.timestamps
end
end
end
長いテーブル名&カラム名に外部キー制約を設定しようとしていました。
エラー文
実行すると...
Index name 'index_foo_bar_example_registrations_on_parent_example_table_name_id'
on table 'foo_bar_example_registrations' is too long; the limit is 63 characters`
どうやら63文字に収めないといけないようです。
解決方法
作成するインデックス名を明示してあげる。
作成するインデックス名を明示してあげる。
外部キーを設定する際にインデックス名を設定しないと、自動的にRailsが生成してくれます。
しかし、postgresで使う名前は63バイトに限定されている為、このエラーが発生します。
そこで↓のように変更を加えます。
class CreateFooBarExampleRegistrations < ActiveRecord::Migration[6.0]
def change
create_table :foo_bar_example_registrations do |t|
t.references :parent_example_table_name, null: false, foreign_key: true,
index: { name: :index_foo_bar_regs_on_parent_example_table_name_id }
# ↑省略したインデックス名を設定してあげる。
t.timestamps
end
end
end
名前の付け方
基本は
index_<テーブル名>_<外部キー制約を設定するカラム名>_id
というインデックスが張られるので、その規則に合わせて名前を短縮してあげると良いと思います。
Author And Source
この問題について(【Ruby on Rails】migration index too long なエラーを解決), 我々は、より多くの情報をここで見つけました https://qiita.com/yasuhiron777/items/8f6d4dbf97a31f4ce442著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .