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
問題は、もう一度実行すると、ID が 6、7、8、9、10 の 5 つの新しいレコードが作成されることです。これは、既に存在する create() 呼び出しに ID を指定したにもかかわらずです。次のSQLを実行しようとすると、これらの呼び出しが失敗することが予想されます。
insert into problem_types (id, name, description) values (1, 'foo', 'bar');
...失敗します:
エラー 1062 (23000): キー 'PRIMARY' のエントリ '1' が重複しています
ID が既に存在する場合に create() メソッドを失敗させるにはどうすればよいですか?
ありがとう。