RailsのMigrationコマンドを自分用にまとめました。
モデル作成
$ rails generate model <モデル名単数形>
- example
$ rails generate model ship
モデル修正
$ rails g migration Add<列名>To<モデル名> <列名>:<型>
$ rails db:migrate
列を追加したい例
- User テーブルに locale 列を追加したい例
$ rails g migration AddLocaleToUser locale:string
$ rails db:migrate
参照関係を追加したい例
- IssueComment テーブルにRoleモデルの参照関係(role列)を追加したい例
$ rails g migration AddRoleToIssueComment role:references
$ rails db:migrate
参照関係を追加したい例(外部キー制約を付けない場合)
def change
add_reference :issue_comments, :role, foreign_key: false
end
列を削除したい例
- User テーブルの列 locale を 削除したい例
$ rails g migration RemoveLocaleToUser locale
$ rails db:migrate
参照関係を削除したい例
- IssueComment テーブルに role 列を削除したい例
def change
remove_reference :issue_comments, :role, index: true, foreign_key: true
end
テーブル名を変更したい例
- User テーブルの名前 users を hoge_users に変更したい例
def change
rename_table :users, :hoge_users
end
列名を変更したい例
- User テーブルの列 local の列名を locale に変更したい例
def change
rename_column :users, :local, :locale # 列名をlocaleに変更
end
列の型を変更したい例
- User テーブルの列 locale を text型 → string型 に変更したい例
def change
change_column :users, :locale, :string
end
indexを追加したい例
- Ship テーブルの列 ship_code にindex(Unique制約有)を付けたい場合
def change
add_index :ships, :ship_code, :unique => true
end
indexを追加したい例(複数列)
- ShipEquipment テーブルの列 ship_id,sfi,equipment_model_id にindex(Unique制約有)を付けたい場合
def change
add_index :ship_equipments, [:ship_id, :sfi, :equipment_model_id], :unique => true
end
既にindexが存在するテーブルにUnique制約を付けたい例
def change
remove_index :ship_equipments, [:ship_id, :sfi, :equipment_model_id]
add_index :ship_equipments, [:ship_id, :sfi, :equipment_model_id], :unique => true
end
indexが長すぎるため、index名を付けたい例
def change
add_index :satellite_speed_logs, [:ship_equipment_id, :measurement_date], name: :index_satellite_speed_logs_ship_equipment_measurement_date
end
モデル削除
def change
drop_table :users
end
rollback
$ rails db:version # 現在のバージョンの確認
Current version: 20180816060332
$ rails db:rollback # 1つ前に戻す
$ rails db:rollback STEP=2 # 2つ前に戻す
DBの再構築
$ rails db:reset
# すべてのテーブルをdrop
# "db/schema.rb" を元にテーブルを再作成