migrationのchangeの話
久しぶりにrailsで開発することになって、久しぶりに「rails g model hoge」 をしたら、upじゃなくてchangeを実装するようになっていた。
でも、今まで通り、upも使える。
changeの中でcreate_tableを実行するように書くと、「rake db:rollback」でdownでdrop_tableを書かなくてもdropしてくれる。
upのときにテーブルやカラムにコメントを設定するようなsqlを実行したい場合changeでどうやるかというと、「reversible」を使うとよい。
def change create_table :hoges do |t| t.string :name, null: false t.references :foos end reversible do |rv| rv.up do execute <<-SQL comment on table hoges is 'ほげ'; comment on table hoges.name is '名前'; SQL end rv.down do # down 時に流したいSQLをながす execute <<-SQL ... SQL end add_column ... rename_column ... end end
reversibleに渡すブロックの中で、add_column,rename_columnを実行するように書くとup/downでスムーズに処理されるようになる。
詳しくは、本家で。