我正在开发一个Rails 4应用程序。我们有一个seed.rb
文件,其中包含我们团队使用的一些基本数据,例如:
Country.delete_all
Country.create!(name: "United States", code: "US", description: "")
每隔一段时间,我们需要向此文件添加更多种子数据。但是运行rake db:seed
,首先会在重新插入之前擦除引用表中的记录。由于这些表中的ID列是自动生成的,因此旧ID将丢失。因此,在某人的本地开发环境中,许多个人测试数据将无效,因为外键被破坏。从seed.rb中的每个模型中删除.delete_all
可以作为解决方案传递,但运行db:seed
会输出大量错误。
所以,我正在寻找生成种子数据的最佳实践,同时保留旧的主键(在我的情况下为ID)。
谢谢!
答案 0 :(得分:3)
如果您不需要先删除它们,可以使用
Country.where(姓名:"美国")。first_or_create
这意味着只有在它不存在的情况下才会创建它,因此只会创建新种子,而旧记录则相同