2009-08-03 16 views
1

私は私のRailsアプリで4つの関連の移行を持っている:Railsのマイグレーション質問

まず3つのマイグレーションをするself.upで一つのテーブルごとに作成し、かつ、それぞれのするself.down方法でそれらを削除します。

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

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

答えて

5

これは間違っています。

移行は、あなたのデータモデルないあなたデータを移行するために使用すべきです。

Rails 2.3.4では 'シード'が追加されました。これはdb/seeds.rb内のファイルで、データベースをブートストラップするためのルビコードを含んでいます。これは、カテゴリ、ルックアップテーブル、またはユーザーアカウントのような、データベース用の半静的コンテンツを作成するための素晴らしい方法です。

あなたは、あなたがデータをロードするrakeタスクを持っている場合はさておき、なぜそのrakeタスクを実行し、移行を気にシンプルなrakeタスク

rake db:seed 
+0

はい回答に同意してくれてありがとう。私は当時2.2.2のレールで作業していました。私はdbについて最近聞きました:最近、私のプロジェクトでそれを使用しています。マイグレーションによるデータの読み込みは、まったく正しいとは思われませんでした。 –

3

実際にこれを行う方法はありません。あなたが行ったことに基づいて、4回目の移行では、ダウンメソッドでデータをアンロードするだけです。それぞれのダウンは、アップのアクションを元に戻すだけです。

テーブルを作成する移行のデータをロードすることは、必ずしも必要ではありません。 has_many関係またはbelongs_to関係を作成する3つの表がある場合は、データを別々のマイグレーションに入れてリレーションシップを作成し、データ・ロードで使用できるようにしてください。

データを読み込むためのレーキタスクがある場合は、そのレーキタスクを実行するマイグレーションをどうして邪魔になるのでしょうか?レイクタスクをインストールの一部として実行するか、レイクタスクを使用してデモデータをロードまたはアンロードしてください。

一般的に私は移行スキーマに焦点を当てています。私は独立して呼び出すレーキタスクにデータをロードしていました。

+0

__Allでシード・データをロードすることができますか?レイクタスクをインストールの一部として実行するか、レイクタスクを使用していくつかのデモンストレーションデータをロードまたはアンロードします。主にチーム内の他の開発者の方が楽になるようにします。だから、レーキタスクを実行するためのもう1つのステップを覚えておく必要はありません。 方向性に感謝します。私は思っていた、彼らは一緒に行く必要があります。これで、self.downの4回目の移行で行を削除できます。 –