我試圖強制在我的表字段之一的值的唯一性。更改表格不是一個選項。我需要使用ActiveRecord有條件地插入一行到表中,但我關心同步。Rails的競爭條件first_or_create
是否first_or_create
在Rails ActiveRecord中預防競爭狀態?
這是從GitHub的first_or_create
的源代碼:
def first_or_create(attributes = nil, options = {}, &block)
first || create(attributes, options, &block)
end
是否有可能重複的條目將導致數據庫由於有多個進程同步的問題?
AR充滿了這樣的競爭條件。 – dbenhur
請參閱(SO dup)[我如何避免Rails應用程序中的競態條件?](http://stackoverflow.com/questions/3037029/how-do-i-avoid-a-race-condition-in-my -rails-app)和Rails Cookbook [避免使用樂觀鎖定的競態條件](http://underpop.free.fr/r/ruby-on-rails/cookbook/I_0596527314_CHP_3_SECT_19.html) – dbenhur
@dbenhur - 我無法使用樂觀鎖定,因爲它涉及到向表中添加一個字段。我的一個條件是我不能添加一個字段,所以它不是重複的。 –