初めまして2litrewtと申します。
ruby on railsの学習中に起きた問題とその解決法について説明していきます。
マイグレーションファイルを作成してもschema.rbファイルが更新されない時の対応
学習中にマイグレーションファイルを作成しました。
(dockerを利用しているので文頭にdocker compose run webをつけています。)
docker compose run web rails generate migration CreatePosts title:string body:text user:references
実行はできたのですがschema.rbファイルには生成したテーブルの情報は記載されず...
schema.rb
ActiveRecord::Schema[7.0].define(version: 2024_08_17_090454) do
enable_extension "plpgsql"
create_table "users", force: :cascade do |t|
t.string "email", null: false
t.string "crypted_password"
t.string "salt"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["email"], name: "index_users_on_email", unique: true
end
end
一度マイグレーションの適用状況を確認します
docker compose run web rails db:migrate:status
database: sample_app_development
Status Migration ID Migration Name
--------------------------------------------------
up 20240815135115 Sorcery core
down 20240817090454 Create posts
どうやらdownになっていたようです。
これを下記コマンドupにします。
docker compose run web rails db:migrate:redo
無事記載されました!!
schema.rb
ActiveRecord::Schema[7.0].define(version: 2024_08_17_090454) do
enable_extension "plpgsql"
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "body"
t.bigint "user_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_posts_on_user_id"
end
create_table "users", force: :cascade do |t|
t.string "email", null: false
t.string "crypted_password"
t.string "salt"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["email"], name: "index_users_on_email", unique: true
end
add_foreign_key "posts", "users"
end
まとめ
一度マイグレーションの適用状況を確認するのが重要ですね。