1

我有一个使用 rake db:seed 执行的带有种子的 Rails 项目。这反过来加载了 db/seeds 目录中的 RB 文件,该目录又执行如下操作:

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

表格中有一个 projects.yml

project_name1:
  property: value

project_name2:
  property: value

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

然后它突然停止这样做。我像往常一样删除并重新加载我的数据库(使用 sql 转储恢复到干净、未更改的状态),但 DB 种子运行完美,只保留现有数据,只添加新数据(即使所有数据都在 yml 文件中)无需触及现有的 ID。

然后突然又开始了。我花了两周时间在谷歌上搜索有关种子、现有数据播种和 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 回答