ActiveRecord(Migration)でよく使うやつをメモっ!

カラムを追加

add_column :users, :name, :string

特定のカラムの後ろに追加

afterでひとつ前のカラムを指定する

add_column :users, :name, :string, after: :id

上記のように書けば、idの次にnameになる

timestampを追加

テーブル作成時であれば、

create_table :users do |t|
  t.timestamps
end

created_at/ updated_at が追加されるんですが、あとから追加する場合

add_column :users, :created_at, :datetime, null: true
add_column :users, :updated_at, :datetime, null: true

User.update_all(created_at: Time.current, updated_at: Time.current)

change_column :users, :created_at, :datetime, null: false
change_column :users, :updated_at, :datetime, null: false

カラム名の変更

# テーブル名, 変更前のカラム名, 変更後のカラム名
rename_column :users, :name, :full_name

カラムの型を変更

# テーブル名, 変更するカラム名, 変更後の型
change_column :users, :name, :text

リファレンスの追加

# users.job_id の追加
add_reference :users, :jobs

NULL制約を変更

# nullを許可する
change_column_null :users, :email, true

# nullを禁止
change_column_null :users, :email, false

カラムを削除

remove_column :users, :name, :string

カラム削除する場合

アプリが動いている状態でいきなりmigrationするとエラーが発生する可能性があるので、
1. アプリを修正(カラムを使用しない状態にする)
この時にignored_columnsに削除するカラムを追加しておきます。

class User < ApplicationRecord
  self.ignored_columns = [:name]
end

これをまずはデプロイ。
2. カラムを削除するデプロイ。
3. ignored_columnsを外して再デプロイ。
のように3回にわけてデプロイすればエラー回避できそう。

何かあれば随時追記で。

SQLを直接実行したい

def change
  ActiveRecord::Base.connection.execute("SELECT * FROM users")
end