Ruby on Railsで「rails db:migrate」を実行したが、下記のエラーが出て、テーブルが作成されないです。
エラーコード
terminal
1rails aborted! 2StandardError: An error has occurred, all later migrations canceled: 3 4Mysql2::Error: Cannot add foreign key constraint: CREATE TABLE `items` (`id` int AUTO_INCREMENT PRIMARY KEY, `name` varchar(255) NOT NULL, `description` text NOT NULL, `brand` varchar(255), `condition` varchar(255) NOT NULL, `delivery_fee` varchar(255) NOT NULL, `delivery_regions` varchar(255) NOT NULL, `shipping_schedule` varchar(255) NOT NULL, `price` int NOT NULL, `user_id` int, `category_id` int NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, INDEX `index_items_on_user_id` (`user_id`), INDEX `index_items_on_category_id` (`category_id`), CONSTRAINT `fk_rails_89fb86dc8b` 5FOREIGN KEY (`category_id`) 6 REFERENCES `categories` (`id`) 7) ENGINE=InnoDB 8/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/db/migrate/20200622134903_create_items.rb:3:in `change' 9/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `require' 10/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `<top (required)>' 11/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/spring:15:in `<top (required)>' 12bin/rails:3:in `load' 13bin/rails:3:in `<main>' 14 15Caused by: 16ActiveRecord::StatementInvalid: Mysql2::Error: Cannot add foreign key constraint: CREATE TABLE `items` (`id` int AUTO_INCREMENT PRIMARY KEY, `name` varchar(255) NOT NULL, `description` text NOT NULL, `brand` varchar(255), `condition` varchar(255) NOT NULL, `delivery_fee` varchar(255) NOT NULL, `delivery_regions` varchar(255) NOT NULL, `shipping_schedule` varchar(255) NOT NULL, `price` int NOT NULL, `user_id` int, `category_id` int NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, INDEX `index_items_on_user_id` (`user_id`), INDEX `index_items_on_category_id` (`category_id`), CONSTRAINT `fk_rails_89fb86dc8b` 17FOREIGN KEY (`category_id`) 18 REFERENCES `categories` (`id`) 19) ENGINE=InnoDB 20/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/db/migrate/20200622134903_create_items.rb:3:in `change' 21/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `require' 22/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `<top (required)>' 23/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/spring:15:in `<top (required)>' 24bin/rails:3:in `load' 25bin/rails:3:in `<main>' 26 27Caused by: 28Mysql2::Error: Cannot add foreign key constraint 29/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/db/migrate/20200622134903_create_items.rb:3:in `change' 30/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `require' 31/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/rails:9:in `<top (required)>' 32/Users/nakaya-kousuke/Documents/GitHub/fleamarket_sample_72a/bin/spring:15:in `<top (required)>' 33bin/rails:3:in `load' 34bin/rails:3:in `<main>' 35Tasks: TOP => db:migrate 36(See full trace by running task with --trace)
マイグレーションファイル
マイグレーションファイルには下記のように記述しています。
・itemsテーブル
・imagesテーブル
・categoriesテーブル
db/migrate/20200622134903_create_items.rb class CreateItems < ActiveRecord::Migration[5.0] def change create_table :items do |t| t.string :name, null: false t.text :description, null: false t.string :brand t.string :condition, null: false t.string :delivery_fee, null: false t.string :delivery_regions, null: false t.string :shipping_schedule, null: false t.integer :price, null: false t.references :user t.references :category, null: false, foreign_key: true t.timestamps end end end
db/migrate/20200622145144_create_images.rb class CreateImages < ActiveRecord::Migration[5.0] def change create_table :images do |t| t.references :item, null: false, foreign_key: true t.string :image_url, null: false t.timestamps end end end
db/migrate/20200623014536_create_categories.rb class CreateCategories < ActiveRecord::Migration[5.0] def change create_table :categories do |t| t.string :name, null: false t.string :ancestry t.timestamps end end end
私の考えた仮説
■仮説1
StandardErrorを調べてみると、「通常のプログラムで発生する可能性の高い例外クラスを束ねるためのクラスです。」と書かれていました。
※参考サイト
https://chinatz.hatenablog.com/entry/2018/08/02/230222
https://randd.kwappa.net/2011/02/07/250/
この例外クラスというものを初めて聞いて調べていますが、いまいち理解できないです。。。
StandardErrorを解決したらいいのか?
■仮説2
Mysql2::Error:の部分を読んでみると、
「Mysql2::Error: Cannot add foreign key constraint」と書いてあり、
外部キー制約を追加できていないようです。
この外部キー制約の記述方法が間違っているのか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/23 10:43
2020/06/23 12:13
2020/06/23 12:36
2020/06/24 04:09