seed.rbファイルを構造化して、進行中のデータの作成と更新を可能にします。シードファイルを1回だけ実行することに限定されず、最初のデプロイメントにしか使用されないと思われる場合は、参照データの設定時に提供できる柔軟性が欠落します。
シードファイルは、ちょうどあなたのようなことを行うことができますので、ルビー:それは存在しないか、それはいくつかを見つけた場合、データを更新しない場合、これは新しいデータが作成されます
user = User.find_or_initialize_by(email: '[email protected]')
user.name = 'Bob'
user.password = 'secret'
user.role = 'manager'
user.save!
。
シードファイルを正しく構成すると、依存オブジェクトを作成して更新することもできます。
bang saveを使用して、オブジェクトを保存できない場合に例外が発生するようにすることをおすすめします。これは、シードをデバッグする最も簡単な方法です。
私はseedbank gemを使用して、環境、依存するシードなどのデータを設定するなど、シードデータにさらに多くの構造を提供します。
シードデータにマイグレーションを使用することはお勧めしません。柔軟性の欠如(たとえば、シード・データをたった一つの環境にターゲティングする方法)と、特定の環境をリフレッシュするためにいつでも実行できる再利用可能なデータ・セットを構築する実際の方法はありません。また、スキーマへの参照がない一連の移行があり、新しいデータを生成するか、現在のデータを変更するたびに新しい移行を作成する必要があります。
あなたが望むように 'seed.rb'を実行することができます。これは普通のルビスクリプトファイルです...前に実行したものを再度実行すれば、重複が発生することに注意してください。あなたのケースでは、データの行を追加して「レーキタスク」を使用するか、スクリプトランナーを使用する場合は、http://guides.rubyonrails.org/command_line.html#rails-runner私は移行が適切であるとは思わないこれでも。 – j03w