質問

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

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

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

間違っていますか?おそらく、3つのテーブルを作成してself.upにデータをロードし、self.downメソッドで3つのテーブルすべてをドロップするマイグレーションを1つ作成する必要がありますか?

役に立ちましたか?

解決

これは間違っています!

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

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

その後、単純なrakeタスクでシードデータをロードできます

rake db:seed

他のヒント

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

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

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

一般に、移行スキーマに焦点を当てており、独自に呼び出すrakeタスクにデータ読み込みを配置します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top