我是铁杆新手,我无法找到这个问题的明确答案。
我们说我有
Project.create!([{title: "foo", description: "bar"}])
在我的seeds.rb文件中然后运行
$rake db:seed
两次。数据库中是否会有两个几乎相同的条目,还是会覆盖初始条目?
答案 0 :(得分:6)
它会复制。
如果要多次运行,但要防止重复。我想你可以:
validate_uniqueness_of :key_attribute
测试您的表的计数,如:
MyClass.create if MyClass.count == 0
更好的解决方案可能是使用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
而不会创建重复项。