RailsAPIでの相互排除の問題に直面しています。データベースに、イベントに参加する人の数を含むEventオブジェクトがあります。
イベントに人を追加する私のEventメソッドを考えてみましょう:
class Event
def add_person
nb = self.number_of_person + 1
# Some stuff
self.number_of_person = nb
self.save
end
end
ここで、クライアントAとBがイベントEに参加したいとします。Railsは2つのリクエストを受け取り、add_personメソッドを並行して呼び出します。最後に、イベントEの人数を2人ではなく、1人増やすことができます。
これが私がしたいことです:
Client A | Client B | Possible in parallel
--------------------------------------------------------------------------
Event.find(1).show | Event.find(1).show | yes
Event.find(1).add_person | Event.find(1).add_person | no
Event.find(1).add_person | Event.find(2).add_person | yes
add_person
同じオブジェクトでメソッドをキューに入れたいだけです。
これを行う方法はありますか?