带有yml文件的Rails DB种子有时会删除并重新添加现有记录,有时则不会。是什么赋予了?

时间:2010-02-19 22:40:16

标签: ruby-on-rails fixtures seed

我有一个带有种子的rails项目,使用rake db:seed执行。这又将db文件加载到db / seeds目录中,然后执行类似这样的操作:

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

表格中有一个projects.yml

project_name1:
  property: value

project_name2:
  property: value

在项目SQL表中有现有的项目记录。 YML文件中的一些是新的,而另一些则不是。我花了几天时间运行数据库种子,它会改变项目ID的一些而不是其他项目ID。但它不会复制它没有改变ID的那些,即使它们都在YML文件中。所以有些记录可以使用,有些则会删除并重新添加新ID(或者直接更新ID,不确定哪个)。

然后它突然停止这样做了。我正常地删除并重新加载我的数据库(使用sql转储返回到一个干净,未改变的状态)但DB种子运行完美,只留下现有数据并且只添加新数据(即使所有数据都在yml文件中)没有触及现有的ID。

然后又突然又开始做了。我花了两周的时间在谷歌搜索有关种子,现有数据播种和ID更新的任何内容,但没有运气。

任何帮助当然都值得赞赏。

1 个答案:

答案 0 :(得分:0)

我使用了一种不同的方法,但它始终如一地为我工作。我将种子数据加载到我创建的db / seed_data /文件夹中的管道分隔的txt文件中,而不是使用project.yml文件,然后使用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
...