🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

MySQL

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

Q&A

解決済

1回答

1388閲覧

外部キーを追加するためにrails db:migrateをしたら、できない。

kawasaki4563

総合スコア32

Ruby on Rails 6

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

MySQL

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

0グッド

0クリップ

投稿2021/03/14 12:11

投稿とプロフィールを結びつけたいのですが、外部キーを取得しようとしてもエラーになってしまう
エラー分は以下です。
Mysql2::Error: Table 'app_name_development.posts' doesn't exist
ただし、shema.rbには、userの外部キーであるuser_idが記載されています。

#問題のソースコード

20210314114705_add_user_id_to_posts.rb

class AddUserIdToPosts < ActiveRecord::Migration[6.0] def change add_reference :posts, :user, foreign_key: true add_reference :profiles, :user, foreign_key: true end end

20210314061456_create_profiles.rb

class CreateProfiles < ActiveRecord::Migration[6.0] def change create_table :profiles do |t| t.string :name t.integer :mania_histry t.string :enjoy_point t.timestamps end end end

20210314061527_devise_create_users.rb

# frozen_string_literal: true class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable # t.integer :sign_in_count, default: 0, null: false # t.datetime :current_sign_in_at # t.datetime :last_sign_in_at # t.string :current_sign_in_ip # t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end

20210514061412_create_posts.rb

class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.text :content t.timestamps end end end

202102513060741_create_active_storage_tables.active_storage.rb

# This migration comes from active_storage (originally 20170806125915) class CreateActiveStorageTables < ActiveRecord::Migration[5.2] def change create_table :active_storage_blobs do |t| t.string :key, null: false t.string :filename, null: false t.string :content_type t.text :metadata t.bigint :byte_size, null: false t.string :checksum, null: false t.datetime :created_at, null: false t.index [ :key ], unique: true end create_table :active_storage_attachments do |t| t.string :name, null: false t.references :record, null: false, polymorphic: true, index: false t.references :blob, null: false t.datetime :created_at, null: false t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true t.foreign_key :active_storage_blobs, column: :blob_id end end end

##ここからmodelを書いていきます

post.rb

class Post < ApplicationRecord has_many_attached :images belongs_to :user validates :content, presence: true end

profile.rb

class Profile < ApplicationRecord has_one_attached :image belongs_to :user validates :name, presence: true validates :mania_histry, presence: true validates :enjoy_point, presence: true end

user.rb

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :posts has_one :profile end

#やってみた事

docker-compose run web rails db:migrate:resetをしてみましたが、migrationの段階で同様のエラーで詰まってしまいます。他には、docker-compose run web rails db:dropをして、createして、migrateしていくといった事もやってみましたがだめでした。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Railsではマイグレーションの実行順序をファイル名のタイムスタンプで決定します。

マイグレーションを作成する

20210314114705_add_user_id_to_posts.rb
20210514061412_create_posts.rb

create_posts.rb より、add_user_id_to_posts.rb が先に実行されてるように見えます。
なので、Mysql2::Error: Table 'app_name_development.posts' doesn't exist

20210314061412_create_posts.rb などにファイル名を変更してみてください。

投稿2021/03/14 22:21

編集2021/03/14 22:44
neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問