【发布时间】:2012-10-14 22:29:27
【问题描述】:
我在 Rails API 中遇到了互斥问题。 我的数据库中有一些 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 方法。
有没有办法做到这一点?
【问题讨论】:
-
将事件排队,然后让一名工作人员处理它们。这行得通吗?
标签: ruby-on-rails-3 mutual-exclusion