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