railsでmigration scriptを生成する
何度やっても覚えないのでメモ・・・
$ rails generate migration <class name>
class nameのところは、実際にそのスクリプトで何をやるかが
明確にわかるようにかーく。
例えば、今生成するのは、organization テーブルに、inquiry カラムを追加するので、
$ rails generate migration AddInquiryToOrganizations
ってしとけばいい。
そうすると、
db/migrate/20141019xxxxxx_add_inquiry_to_organizations.rb
的なファイルができる。
ファイル自体は中身がないテンプレなので、こんな感じに書いておく。
class AddDescriptionToOrganizations < ActiveRecord::Migration def change add_column :organizations, :description, :text end end
add_columnは、rollbackのクエリを、railsが作ってくれるので、
rollbackを気にしなくていいけど、全部のメソッドに対応してるわけではないぽい。
下記のブログに書いてあったので、
Rails3.1ではchange_tableメソッドでマイグレーションするとロールバックできない - give IT a try
ruby on rails - why IrreversibleMigration occurs? - Stack Overflow
4.1stableのsourceみてみました。
rails/command_recorder.rb at 4-1-stable · rails/rails · GitHub
# <tt>ActiveRecord::Migration::CommandRecorder</tt> records commands done during # a migration and knows how to reverse those commands. The CommandRecorder # knows how to invert the following commands: # # * add_column # * add_index # * add_timestamps # * create_table # * create_join_table # * remove_timestamps # * rename_column # * rename_index # * rename_table
は対応してるそうですよ。
ということで、次回忘れたらここを参照しよう。