以下の環境でWebアプリケーション制作の勉強中です。新たにテーブルを作成し(messagesテーブル)マイグレーションスクリプトを
作成し、マイグレーションを実行するとエラーが出てしまい解決できなくて困っております。
環境およびコード、エラー内容は以下になります。
環境
Ruby 2.3.1
Rails5.1.3
MySQL5.6.37
マイグレーションスクリプト
class CreateMessages < ActiveRecord::Migration[5.1] def change create_table :messages do |t| t.references :customer, null: false # 顧客への外部キー t.references :staff_member # 職員への外部キー t.integer :root_id # Messageへの外部キー t.integer :parent_id # Messageへの外部キー t.string :type, null: false # 継承カラム t.string :status, null: false, default: 'new' # 状態(職員向け) t.string :subject, null: false # 件名 t.text :body # 本文 t.text :remarks # 備考(職員向け) t.boolean :discarded, null: false, default: false # 顧客側の削除フラグ t.boolean :deleted, null: false, default: false # 職員側の削除フラグ t.timestamps end add_index :messages, [ :type, :customer_id ] add_index :messages, [ :customer_id, :discarded, :created_at ] add_index :messages, [ :type, :staff_member_id ] add_index :messages, [ :customer_id, :deleted, :created_at ] add_index :messages, [ :customer_id, :deleted, :status, :created_at ], name: 'index_messages_on_c_d_s_c' add_index :messages, [ :root_id, :deleted, :created_at ] add_foreign_key :messages, :customers add_foreign_key :messages, :staff_members add_foreign_key :messages, :messages, column: 'root_id' add_foreign_key :messages, :messages, column: 'parent_id' end end
マイグレーションの実行
$ rails db:migrate
エラー内容
== 20170827025146 CreateMessages: migrating =================================== -- create_table(:messages) -> 1.0368s -- add_index(:messages, [:type, :customer_id]) -> 0.6594s -- add_index(:messages, [:customer_id, :discarded, :created_at]) -> 0.6160s -- add_index(:messages, [:type, :staff_member_id]) -> 0.7579s -- add_index(:messages, [:customer_id, :deleted, :created_at]) -> 0.8821s -- add_index(:messages, [:customer_id, :deleted, :status, :created_at], {:name=> "index_messages_on_c_d_s_c"}) -> 0.6249s -- add_index(:messages, [:root_id, :deleted, :created_at]) -> 0.6584s -- add_foreign_key(:messages, :customers) -> 3.9734s -- add_foreign_key(:messages, :staff_members) -> 2.2416s -- add_foreign_key(:messages, :messages, {:column=>"root_id"}) rails aborted! StandardError: An error has occurred, all later migrations canceled: Column `root_id` on table `messages` has a type of `int(11)`. This does not match column `id` on `messages`, which has type `bigint(20)`. To resolve this issue, change the type of the `root_id` column on `messages` to be :integer. (For example `t.integer root_id`). Original message: Mysql2::Error: Cannot add foreign key constraint: ALTER TABLE `messages` ADD CONSTRAINT `fk_rails_a907b611e8` FOREIGN KEY (`root_id`) REFERENCES `messages` (`id`) /home/vagrant/chibi/chibi/db/migrate/20170827025146_create_messages.rb:28:in `ch ange' bin/rails:4:in `require' bin/rails:4:in `<main>' ActiveRecord::MismatchedForeignKey: Column `root_id` on table `messages` has a t ype of `int(11)`. This does not match column `id` on `messages`, which has type `bigint(20)`. To resolve this issue, change the type of the `root_id` column on `messages` to be :integer. (For example `t.integer root_id`). Original message: Mysql2::Error: Cannot add foreign key constraint: ALTER TABLE `messages` ADD CONSTRAINT `fk_rails_a907b611e8` FOREIGN KEY (`root_id`) REFERENCES `messages` (`id`) /home/vagrant/chibi/chibi/db/migrate/20170827025146_create_messages.rb:28:in `ch ange' bin/rails:4:in `require' bin/rails:4:in `<main>' Mysql2::Error: Cannot add foreign key constraint /home/vagrant/chibi/chibi/db/migrate/20170827025146_create_messages.rb:28:in `ch ange' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)
とエラー表示されますがどこが悪さをしているか不明なのでどなたか解決方法を教えていただけないでしょうか?
宜しくお願いします。
追記:別のエラーが発生してしまいました。
== 20170827025146 CreateMessages: migrating =================================== -- create_table(:messages) rails aborted! StandardError: An error has occurred, all later migrations canceled: Index name 'index_messages_on_customer_id' on table 'messages' already exists/home/vagrant/chibi/chibi/db/migrate/20170827025146_create_messages.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' ArgumentError: Index name 'index_messages_on_customer_id' on table 'messages' already exists /home/vagrant/chibi/chibi/db/migrate/20170827025146_create_messages.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/27 05:28
2017/08/27 05:45
2017/08/27 05:57