我有一个带有种子的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更新的任何内容,但没有运气。
任何帮助当然都值得赞赏。
答案 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
...