2011-02-01 6 views
1

私はRails Appで4つのモデルを生成しました。今では、マイグレーションによって同じモデルのテーブルを作成したいと思っています。生成されたRailsモデル - 移行はどのように実行されますか?

空白の移行は、私がrake db:migrate

を行うと私は私のテーブルが正しく生成されることを保証するために何をすべきか何を順番にマイグレーションを実行する、今、私の/db/migrateフォルダにそこに座っています。私は先に進んで私のモデルの関連付けを定義してから移行を実行する必要がありますか?

私がそれらをそのまま実行すると、Railsはどのように移行のt.references部分を見つけ出すのでしょうか?

助けてください。

答えて

3

移行はモデルに直接リンクされていません。移行を実行する前に、モデルにアイテム(アソシエーションなど)を入れたり、離したりする心配はありません。移行は、データベーステーブルとそのフィールド/列を作成または変更するためのレシピに過ぎません。マイグレーションを実行する前または後に、モデルの関連付けを並べ替えることができます。それは問題ではありません。

移行は、移行のファイル名の順に実行されます。 script/generate model YourModelNameまたはscript/generate migration MyMigrationを使用して移行を作成した場合は、タイムスタンプ(たとえば、20110201165030など)が常にファイル名の前に追加されます。これにより、マイグレーションが生成された順に実行されます。

t.referencesの部分は何も把握する必要はありません。これは、次に来るシンボルだけを取り、それを文字列にして、_idを追加し、その(新しい)名前を持つ整数フィールドをデータベーステーブルに作成します。それは単なる大会です。それは確かにではないあなたのモデルに任意の団体を探します。

(ここで示したコード例はRails 2.3用ですが、Rails 3を使用している場合はgenerateコマンドが少し違うと思います)。

4

実際には参照を使用する必要はありません(外部キーは適用されません)。あなたがその構文を好むならば、参照はあなたが読むことをより簡単にするかもしれません。これら二つの移行は等価です:

 
create_table :posts do |t| 
    t.references :category 
end 

create_table :posts do |t| 
    t.integer :category_id 
end 

また、移行は、定義された順序で実行されます(すなわち、それらが作成された順序)。

+0

4モデルでは4つのマイグレーションがあります。もし私が 'rake db:migrate'を実行しているのであれば、4つの移行をすべて実行するはずですか? –

+0

それは正しいです。 4つの移行がすべて実行されます。 –

+0

ともう1つ質問がありますが、ここに記載されているように 'id'主キーが自動的に作成されます:http://guides.rubyonrails.org/migrations.html#anatomy-of-a-migration –

関連する問題