emily-08
@emily-08 (えみり)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

テーブルにカラムの追加をする

Q&A

Closed

解決したいこと

Ruby on Railsでメモアプリをつくっています。
現在、テーブルにカラムの追加をしたいのですが、コードの辻褄が合わなくなったのかエラーになってしまいます。
後からカラムの追加をする方法を教えていただきたいです。

使用するモデルは、MemoモデルとGenreモデルです。

自身の行っている作業
①Genreモデルを作成
②テーブルにnameカラムを作成
③rails db:migrateを実行

この後、Memoモデルを作成してから再度Genreにmemo_idのカラムを追加したいのですがどうしたらいいでしょうか?

発生している問題

class CreateGenres < ActiveRecord::Migration[6.0]
  def change
    create_table :genres do |t|
      t.string :name,        null: false
      t.references :user,    null: false, foreign_key: true
      t.timestamps
    end
  end
end

ここに以下のコードを追加したいです。

t.references :memo,    null: false, foreign_key: true

初歩的な質問ではあると思うのですが回答をお願いします!

0

1Answer

もう一つマイグレーションファイルを作ることになると思います。
(基本的には、一度実行したマイグレーションに後からカラムを追加することはありません)

以下のようなコマンドを打ってください。

$ rails generate migration クラス名 カラム名:データ型
  • クラス名は、基本的に「操作内容がわかる名前+テーブル名」にします(例: AddMemoToGenres
  • カラム名は追加したいカラム名を指定します
  • データ型は追加したいカラムのデータ型を指定します。

具体的には以下のような感じになると思います。

$ rails generate migration AddMemoToGenres memo:references 

新しいマイグレーションファイルができるので、内容を確認してください(必要であれば修正してください。 null: false などを書き足せばよいと思います)

以下のような感じになると思います(細かいところは少し違うかもしれません)。

  class AddMemoToGenres < ActiveRecord::Migration
    def change
-     add_reference :memo, :memos, foreign_key: true
+     add_reference :memo, :memos, foreign_key: true, null:false
    end
  end

(マイグレーション実行前なら、複数のカラムを追加する、あるいは削除する、名前を変えるなどを追加しても大丈夫です)

その後、実際にマイグレーションを実行してください。

$ rails db:migrate

以下の Rails ガイドが参考になると思います。
(上記の説明は実際に動かしながら書いたわけではないので、書き間違いなどあるかもしれません。ガイドなどを参考にやってみてください)

0Like

Comments

  1. @emily-08

    Questioner

    とてもご丁寧にありがとうございます!!
    助かりました!

Your answer might help someone💌