在Rails中更新并保存activerecord字段?

时间:2011-12-30 09:05:49

标签: ruby-on-rails database race-condition

有一个简单的方法:

def get_award(user)
  u = User.find(user).score += 10
  u.save
end

我的问题是,是否存在潜在的竞争条件导致用户get_award两次但只获得10分?如何避免呢?

2 个答案:

答案 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点