2

次のことができるようになりたいです。

  1. 主キーのリセットを含め、1 つのテーブルをクリアします。
  2. db:seed を使用して、そのテーブルに新しいデータを補充します
  3. データをそのままにして、他のすべてのテーブルを同じに保ちます

これは、テーブルを削除してロールバック時に再作成する移行を行うことで可能になることを理解しています (このブログ投稿のように)。ただし、後の移行でテーブル スキーマを変更すると、更新を維持するのが面倒になる可能性があります。

私が探している3つの効果を達成するための上記のソリューションよりも良い方法はありますか? ありがとう!


編集:以下の回答を使用するときに、他の新しい人に役立つ可能性のある2つのこと:

4

1 に答える 1

1

あなたはrake db:seedタスクの使用を考える上で正しい方向に進んでいます:

フィクスチャを使用してテーブルを埋めると、そのテーブルがクリアされ、IDがリセットされます。したがって、最初の要件を満たすために、特別なテーブル専用に作成されたフィクスチャファイルをロードするrakeタスクを作成します。とは別のrakeタスクを使用することをお勧めします。rake db:seedこれにより、そのタスクを通常どおり自由に使用でき、入力するのは難しくありませんrake db:seed && rake db:special_table_seed

my_table.ymlテーブルシードデータを使用して別のymlファイルを作成します

レーキタスクで使用するコマンドは次のとおりです。

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures("/path/to/the/directory/", "my_table")

テーブル構造の変更に動的に適応するプロセスの最終的な必要性については、提案はありません-申し訳ありません。これを実行する1つの方法は、移行を使用して管理することですが、一般的に保守が非常に難しいと見なされているため、お勧めしません。構造に大きな変更を加えるたびに、シードファイルに対して行う必要のある変更を評価する作業を行う方がよいでしょう。

于 2013-02-20T12:29:51.583 に答える