2

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

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

4番目の移行では、3つすべてに(self.upで)データをロードするrakeタスクが実行されます。この移行のself.downに何を入れて、3つのテーブルから行を削除するかを考えていますか?

私はそれを間違っていますか?おそらく、3つのテーブルを作成し、self.upにデータをロードし、self.downメソッドに3つのテーブルすべてをドロップする、1つの移行を作成する必要がありますか?

4

2 に答える 2

5

これは間違っています!

移行は、データではなくデータモデルの移行にのみ使用する必要があります。

Rails2.3.4は「シード」を追加します。これはdb/seeds.rb内のファイルであり、データベースを「ブートストラップ」するためのrubyコードが含まれています。これは、カテゴリ、ルックアップテーブル、ユーザーアカウントなど、データベースの半静的コンテンツを作成するための優れた方法です。

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

rake db:seed
于 2009-10-03T17:49:04.003 に答える
3

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

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

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

通常、移行スキーマに焦点を合わせ、データの読み込みはすべて、個別に呼び出すrakeタスクに入れます。

于 2009-08-03T12:44:23.140 に答える