Rails5.1からidカラムがbigintになるのでその対応
Rails5.1からidカラムがbigintになるのでその対応メモ。
↓は対応した人のエントリです。bigintが必要になってから変更するのでは間に合わないので最初から設定しちゃおうみたいな感じですね。
Rails 5.1: Default Primary Keys Are Now BIGINT
このPR(Restore the behaviour of the compatibility layer for integer-like PKs by kamipo · Pull Request #27389 · rails/rails · GitHub) にもあるように互換性には気を使って開発してくれていますが、schema.rbは migrate:reset タスクを実施するなどして再生成する必要があるみたいです。
schema.rbが下記のようになっていたとして、
create_table "users" do |t| t.string "name", null: false create_table "addresses" do |t| t.integer "user_id" t.string "name", null: false add_foreign_key "addresses", "users"
5.0以前では問題なくテーブルの作成と外部キーの設定が行えていましたが、5.1ではエラーになります。
それはusers,addressテーブルのidカラムがbigintになりますが、外部キーを設定しようとしているaddressesテーブルのuser_idカラムはint, usersテーブルのidカラムはbigintと差異が出てしまうからです。
migrateファイルが正しく管理されている場合は、 migrate:resetタスクを実行することで、Rails5.1でも以前のDB定義を維持することができるschema.rbを出力することができます。
再生成すると以下のようになります。
create_table "users", id: :integer do |t| t.string "name", null: false create_table "addresses", id: :integer do |t| t.integer "user_id" t.string "name", null: false add_foreign_key "addresses", "users"
id: :integerが各テーブルに付与され、エラーが解決されます。
schema.rbを以前のDB定義を維持できるように変更し、そのあとで、必要に応じて各テーブルのidカラムをbigintにしていくのが良いんじゃないかなーと思います。