1
class State < ActiveRecord::Base
validates_uniqueness_of :identifier
end
現在假定有兩個正在運行的進程可以同時插入其中兩個記錄。乘客就是一個很好的例子。這是一個人爲的:防止多個活動記錄進程插入重複記錄
State.find_by_identifier("UNIQ").delete rescue nil
while Time.now < Time.now.change(:hour => 17, :min => 00, :sec => 15)
sleep 0.001
end
ActiveRecord::Base.transaction do
s = State.new;s.identifier = "UNIQ"
s.save!
end
s.valid?
這個想法是,我們改變時間值將在未來略有變化。然後複製/粘貼到兩個不同的控制檯。
最終目標是讓他們在同一時間「釋放」。怎麼了?他們都成功創建了一個新的狀態對象,並且最終都返回false。
Soooo,我該如何阻止這種情況發生?
爲什麼它值得我使用MySQL和表是InnoDB。
我想知道爲什麼這個答案被拒絕?它看起來很完整,並且確保沒有任何事情能夠通過數據庫服務器的驗證。 – 2011-04-13 16:42:53