2


0

私は私のRailsアプリに4つの関連する移行があります。

最初の3回の移行で、self.upにそれぞれ1つずつテーブルを作成し、それらをそれぞれのself.downメソッドにドロップします。

4回目の移行では、3つすべて(self.up内)にデータをロードするレーキタスクを実行します。 私は3つのテーブルから行を削除するためにこのマイグレーションのself.downに何を入れるべきか考えていますか?

間違っていますか? 3つのテーブルを作成してself.upにデータをロードし、self.downメソッドに3つすべてのテーブルをドロップするという移行を1つ作成したはずです。

2 Answer


5


これは間違っています!

マイグレーションは、あなたの* Data *ではなくあなたのData * Model *をマイグレーションするためにのみ使用されるべきです。

Rails 2.3.4では「種」が追加されました。 これはdb / seeds.rb内のファイルで、データベースを 'ブートストラップ’するためのRubyコードが含まれています。 これは、カテゴリ、ルックアップテーブル、ユーザーアカウントなど、データベース用の準静的コンテンツを作成するのに最適な方法です。

その後、簡単なレーキタスクでシードデータをロードすることができます。

レーキdb:seed


3


これを行うための正しい方法も間違った方法も実際にはありません。 これまでの作業に基づいて、4回目の移行ではデータをdownメソッドでアンロードするだけです。 各ダウンはアップのアクションを元に戻すだけです。

テーブルを作成する移行でデータをロードすることは確かに必要ありません。 has_manyまたはbelongs_toリレーションシップを作成する3つのテーブルがある場合は、リレーションシップを作成してそれらをデータロードで使用できるように、データを個別の移行に入れることは意味があります。

それだけではなく、データをロードするためのレーキタスクがある場合、なぜそのレーキタスクを実行する移行に悩まされるのでしょうか。 インストールの一部としてrakeタスクを実行するか、単にrakeタスクを使用してデモデータをロードまたはアンロードするだけです。

一般的に、私は自分のマイグレーションスキーマに焦点を当てています、そして私は私が独自に呼び出すレーキタスクにデータロードを置くことになるでしょう。