运行rake时会发生什么:db seed两次?

时间:2014-10-24 01:59:38

标签: ruby-on-rails ruby rake seed

我是铁杆新手,我无法找到这个问题的明确答案。

我们说我有

Project.create!([{title: "foo", description: "bar"}])

在我的seeds.rb文件中然后运行

$rake db:seed

两次。数据库中是否会有两个几乎相同的条目,还是会覆盖初始条目?

2 个答案:

答案 0 :(得分:6)

它会复制。

如果要多次运行,但要防止重复。我想你可以:

  1. 在一个关键字段中使用验证,例如放置validate_uniqueness_of :key_attribute
  2. 测试您的表的计数,如:

    MyClass.create if MyClass.count == 0

  3. 更好的解决方案可能是使用find_or_create_by方法。请参阅文档:http://easyactiverecord.com/blog/2014/03/24/using-find-or-create-with-multiple-attributes/

答案 1 :(得分:3)

它只是运行该文件。就防止创建重复的种子数据而言,Rails不会为您做任何事情。如果您的文件创建了一个记录,它将在每次播种时尝试创建该记录。在您不想要重复的种子数据的情况下,完全由您来阻止这种情况。

如果要创建记录,除非它已经存在,请使用find_or_create_by

Project.find_or_create_by_title_and_description "foo", "bar"

这将创建一个带有给定标题和说明的Project,除非它已经存在,让您可以根据需要多次运行rake db:seed而不会创建重复项。