我是一个新手,对于这个问题我还没有找到确定的答案。
假设我有以下代码:
Project.create!([{title: "foo", description: "bar"}])
在我的 seeds.rb 文件中,然后运行。
$rake db:seed
两次操作,数据库中会出现两个近乎相同的条目,还是覆盖之前的条目?
我是一个新手,对于这个问题我还没有找到确定的答案。
假设我有以下代码:
Project.create!([{title: "foo", description: "bar"}])
$rake db:seed
两次操作,数据库中会出现两个近乎相同的条目,还是覆盖之前的条目?
它会重复。
如果您想运行多次,但要防止重复。我猜你可以:
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/
它只是运行文件。Rails不会为您防止创建重复的种子数据。如果您的文件创建记录,每次播种时它都会尝试创建该记录。如果您不想要重复的种子数据,完全由您来防止这种情况。
如果您想创建一个记录,除非它已经存在,请使用find_or_create_by
:
Project.find_or_create_by_title_and_description "foo", "bar"
这将创建一个具有给定标题和描述的Project
, 除非它已经存在,这样你可以随意运行rake db:seed
而不会创建重复项。