我正在使用rake任務來使用一些初始數據填充我的數據庫。我想在表格中創建一堆條目,並且前幾個ID,所以它們始終存在,並始終具有這些ID。我不介意在開發環境中有人添加/刪除/修改記錄,但我總是希望前5個ID具有值。這裏是我的lib /任務/ bootstrap.rb文件的簡化版本:當ID已經存在時創建失敗
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分新的記錄,使用標識6,7,8,9,10,這就是儘管事實上,我向已經存在的create()調用提供了id。我期待這些呼叫失敗,因爲如果我嘗試做以下SQL:
insert into problem_types (id, name, description) values (1, 'foo', 'bar');
...失敗:
ERROR 1062(23000):對於重複鍵輸入'1' PRIMARY'
如果ID已經存在,如何獲取create()方法失敗?
謝謝。
你爲什麼使用rake任務而不是種子?使用種子,如果你正確地清理你的數據庫,你總是可以有1-5的id。 – 2013-02-18 21:00:30
我正在使用rake任務,因爲我遇到了另一個推薦的帖子,而我對種子並不熟悉。但是,在閱讀您的評論之後,我查了一下種子,並認爲種子更合適。 – antun 2013-02-19 22:10:04
我正在切換到種子,但是當我執行ProblemType.delete_all時,然後重新創建它們(使用ProblemType.find_or_initialize_by_name()),ID不會從1-5開始;他們不斷增加。 (我在本地使用mySQL)。是否有另一種方法來正確清理數據庫? – antun 2013-02-26 03:40:27