ActiveRecord(Migration)でよく使うやつをメモっ!
2024年2月1日
カラムを追加
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