migrations


一、ファイル名
 
ファイル名は普通のrubyファイル名の前にタイムスタンプを付けて、クラス名の命名規則は普通のrubyクラスと変わらないで、ただ前のタイムスタンプを取り除くだけで、例えばファイル名は2010 0606120001_ですadd_title_to_entries.rbのmigrationクラス名はAddTitleToEntriesであるべきである.
 
railsはタイムスタンプ部分のみをmigrationを識別するidとし、実行されたすべてのmigrationのidがデータベースのschema_に保存されます.migrationsテーブルにあります.rails 2.1以前のバージョンではmigrationのidは1から増加していましたが、多くの人が協力してプロジェクトを開発する場合、これは問題があると考えやすいです.
 
もちろん、新しいバージョンのrailsでもenvironment.rb設定:
 
config.active_record.timestamped_migrations = false

 
これで古い方法でmigrationのidを生成することができます.
 
二、migrationsの修正
 
migrationを書き間違えて実行した場合は、直接変更しないでください.railsはmigrationを変更したことを知らないので、rake db:migrateを実行するとrailsは何もしません.正しい方法は、rake db:migrate:downまたはrake db:rollbackを先に編集し、最後に再びrake db:migrateを編集することです.
 
一般的には、エラーがあっても既存のmigrationを編集しないほうがいいです.
 
最善の方法は、前の書き間違えたmigrationを修復する操作を実行するために新しいmigrationを書くことです.
 
三、migrationsの作成
 
generate modelコマンドとgenerate scaffoldコマンドは、modelに対応するデータベース構造を生成するためのmigrationを作成します.テーブルにフィールドを追加するなど、データベース構造を変更する他の操作を実行する場合は、generate migrationを使用して手動でmigrationを作成できます.この3つのmigrationを作成するコマンドのフォーマットは同じです.
 
ruby script/generate scaffold|model|migration migration_name column_name:column_type

 
migration_nameの名前のフォーマットは、「add_xxx_to_xxx」または「remove_xxx_from_xxx」のように、フィールド名とタイプのリストが続くと、railsは自動的にadd_columnとremove_column命令は生成されたmigrationコードに加算される.例:
 
ruby script/generate migration add_content_to_entries content:string 

 
次のコードが生成されます.
 
  class AddContentToEntries < ActiveRecord::Migration   
    def self.up    
      add_column :entries, :content, :string  
    end  

    def self.down    
      remove_column :entries, :content  
    end 
  end