我正在使用 rake 任务用一些初始数据填充我的数据库。我想在表中创建一堆条目,其中包含前几个 ID,因此它们始终存在,并且始终具有这些 ID。我不介意在开发环境中是否有人添加/删除/修改记录,但我总是希望前 5 个 id 具有值。这是我的 lib/tasks/bootstrap.rb 文件的简化版本:
namespace :bootstrap do
desc "Create the default problem types"
task :default_problem_types => :environment do
ProblemType.create( :id => 1, :name => 'Wrong location', :description => 'blah' )
ProblemType.create( :id => 2, :name => 'Wrong name', :description => 'blah' )
ProblemType.create( :id => 3, :name => 'Wrong details', :description => 'blah' )
ProblemType.create( :id => 4, :name => 'Duplicate', :description => 'blah' )
ProblemType.create( :id => 5, :name => 'No longer exists', :description => 'blah' )
end
desc "Run all bootstrapping tasks"
task :all => [:default_problem_types]
end
这适用于空数据库。它在 problem_types 表中创建了 5 个新条目:
1 - Wrong Location
2 - Wrong name
3 - Wrong details
4 - Duplicate
5 - No longer exists
问题是,如果我再次运行它,它会创建 5 条新记录,ID 为 6、7、8、9、10。尽管我为已经存在的 create() 调用提供了 ID。我希望这些调用会失败,因为如果我尝试执行以下 SQL:
insert into problem_types (id, name, description) values (1, 'foo', 'bar');
... 它失败:
错误 1062 (23000):键 'PRIMARY' 的重复条目 '1'
如果 ID 已经存在,如何让 create() 方法失败?
谢谢。