1

rake db:seedを使用して実行されるシードを含むrailsプロジェクトがあります。これにより、RBファイルがdb / seedsディレクトリにロードされ、次のように実行されます。

Fixtures.create_fixtures("db/seeds","projects")

フォームにprojects.ymlがあります

project_name1:
  property: value

project_name2:
  property: value

プロジェクトのSQLテーブルには、既存のプロジェクトレコードがあります。YMLファイルにあるものの中には新しいものとそうでないものがあります。DBシードの実行に数日を費やしましたが、プロジェクトIDの一部は変更されましたが、他のIDは変更されませんでした。ただし、すべてがYMLファイルに含まれていても、IDを変更しなかったものは複製されません。そのため、問題のないレコードもあれば、削除して新しいIDで再追加するレコードもあります(または、IDを完全に更新するだけで、どちらかわからない場合もあります)。

それから突然それはこれをやめました。通常どおりデータベースをドロップしてリロードします(SQLダンプを使用してクリーンで変更されていない状態に戻します)が、DBシードは完全に実行され、既存のデータはそのままで、新しいデータのみが追加されます(すべてがymlファイルにある場合でも)既存のIDに触れることなく。

それから突然また、それは再びそれをし始めました。私は2週間、シード、既存のデータシード、IDの更新についてグーグルで検索しましたが運が悪かったです。

もちろん、どんな助けでも大歓迎です。

4

1 に答える 1

0

少し異なるアプローチを使用しましたが、一貫して機能しました。project.yml ファイルを使用するのではなく、作成した db/seed_data/ フォルダーに配置したパイプ区切りの txt ファイルにシード データをロードし、既存のデータを上書きしないように、find_or_create_by を使用してデータをロードしました。

seed.rb

  directory = "db/seed_data/"

# Pre-load 
  path = File.join(directory, "projects.txt")
  open(path) do |projects|
    projects.read.each_line do |project|
      name, owner = school.chomp.split("|")
      Project.find_or_create_by_name_and_owner!(name, owner)
    end
  end

----------------

projects.txt

Project A|admin
Project B|user1
Project C|admin
...
于 2011-01-27T06:38:42.750 に答える