Railsで楽観的ロック
AddLockVersionToモデル lock_version:integer
class AddLockVersionToモデル
def self.up
add_column :テーブル, :lock_version, :integer, :default => 0
end
def self.down
remove_column :テーブル, :lock_version
end
end
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::StaleObjectError, :with => :エラーを表示するメソッド
end
Railsの 楽観的ロック と 悲観的ロック の特徴
楽観的ロック
・簡単
・DBを問わない
・処理が重複したときはErrorを出す【重要】
悲観的ロック
・findに:lock => trueを入れないといけないのでちょっとめんどい
(Rails2.3.5だと user.lock! がうまく動かなかった)
・SQLiteは無理っぽい
・処理が重複したときは処理待ちになるのでErrorは出ない【重要】