Railsでテーブルにカラムを追加する方法

Railsのカラム操作はよく行う操作のひとつですが、ことあるごとに忘れてしまっていて毎回調べるので、まとめておきたいとお思います。

Railsでテーブルにカラムを追加する方法

結論

カラムを作成するコード
rails g migration Addカラム名Toテーブル名 カラム名:データ型

例えばですが、以下のように使います。

Userテーブルにユーザーの名前を保存するカラムを作る場合

Userテーブルにnameカラムを追加するコード
rails g migration AddNameToUser name:string

ターミナルで実際にカラム作成した時のコード

以下はHogeTaskテーブルにtitleカラムを追加したときのターミナルの情報です。

ターミナル
$ rails g migration AddTitleToHogeTask title:string #HogeTaskテーブルにtitleカラムを追加するコードです
Running via Spring preloader in process 5419
      invoke  active_record
      create    db/migrate/20220101211538_add_title_to_hoge_task.rb

$ cat db/migrate/20220101211538_add_title_to_hoge_task.rb #マイグレーションファイルの中身を確認
class AddTitleToHogeTask < ActiveRecord::Migration[6.1] 
    def change 
        add_column :hoge_tasks, :title, :string 
    end 
end 
$ rails db:migrate #これで変更を反映させます
Running via Spring preloader in process 5463 == 20220101211538 AddTitleToHogeTask: migrating =============================== -- add_column(:hoge_tasks, :title, :string) -> 0.0023s
== 20220101211538 AddTitleToHogeTask: migrated (0.0024s) ======================

$ cat db/schema.rb #schemaファイルでカラムがちゃんとできているか確認                                 
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running `bin/rails
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2022_01_01_211538) do

  create_table "hoge_tasks", force: :cascade do |t|
    t.string "name"
    t.text "content"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.string "title" #←新しくカラムができてます!
  end

Leave a Reply

Your email address will not be published.

CAPTCHA