質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

解決済

Rails5\.1\.3でマイグレーションを実行時のエラー解消方法を教えてください。

koume
koume

総合スコア0

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

1回答

0評価

0クリップ

3229閲覧

投稿2017/08/27 03:52

編集2022/01/12 10:58

以下の環境で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\)

とエラー表示されますがどこが悪さをしているか不明なのでどなたか解決方法を教えていただけないでしょうか?
宜しくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。