rails - ActiveRecord Migration のまとめ
基本
- db/migration 以下に YYYYMMDDhhmmdd_XXX_YYY.rb のファイルを作成する
- Migrationのファイル名とクラス名は一致していないとダメ
-
- ファイル名: YYYYMMDDhhmmdd_create_users.rb
- クラス名: CreateUsers
- 自分で設定ファイルを作成可能だが 基本的には rails generate migrationコマンドを使用する。
- DBに反映するには、
rake db:migrate
を実行する
- ロールバックは、
rake db:rollback
を実行する
-
- reversible なコマンド(create_table/add_columnなど)については追加不要
- カラム名の変更などは手動で定義する必要がある
CreateXXX - テーブルを作成する
$ rails generate migration CreateUsers
自動的に create_table が追加される。
テーブル名は複数形になる。
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| end end end
同時にカラムの定義も可能。
引数に カラム名:型[:オプション(省略可)] (複数可) を指定する。
型省略時は string になる。
$ rails generate migration CreateUsers name:string email:string
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.string :email end end end
AddYYYToXXX - カラムの追加する
カラムの追加。To以下にテーブル名を指定する。
$ rails generate migration AddNameAndEmailToUsers name:string email:string
db/migrate/20140218112618_add_name_and_email_to_users.rb
class AddNameAndEmailToUsers < ActiveRecord::Migration def change add_column :users, :name, :string add_column :users, :email, :string end end
RemoveYYYToXXX - カラムを削除する
カラムの削除。追加時と同じく To以下にテーブル名を指定する。
$ rails generate migration RemoveEmailToUsers email:string
db/migrate/20140218112720_remove_email_to_users.rb
class RemoveEmailToUsers < ActiveRecord::Migration def change remove_column :users, :email, :string end end
AddYYYRefToXXX - 外部テーブルへの参照を作成する
名前が user_id のカラムが追加され、インデックスが貼られる。
外部キー制約は設定されない(DBではなくモデル側でチェックを
するポリシーのため)。
$ rails generate migration AddUserRefToBlogs user:references
db/migrate/20140218114718_add_user_ref_to_blogs.rb
class AddUserRefToBlogs < ActiveRecord::Migration def change add_reference :blogs, :user, index: true end end
migration の状態を調べる
$ rake db:migrate:status database: /home/babiy/work/testapp/db/development.sqlite3 Status Migration ID Migration Name -------------------------------------------------- up 20140218082310 Create users up 20140218082651 Add name and email to users ||<