有一个简单的方法:
def get_award(user)
u = User.find(user).score += 10
u.save
end
我的问题是,是否存在潜在的竞争条件导致用户get_award
两次但只获得10分?如何避免呢?
答案 0 :(得分:1)
您需要获取“用户”实例,更新分数并保存。在您的代码中,您要保存类,而不是实例化对象:
def get_award(user)
u = User.find(user).score += 10
u.save
end
答案 1 :(得分:0)
是的,这是可能的。
相关问题:How do I avoid a race condition in my Rails app?
你可以使用两种锁定乐观&悲观
http://guides.rubyonrails.org/active_record_querying.html 见第10点