Rails移行の質問
-
10-07-2019 - |
質問
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タスクにデータ読み込みを配置します。