在Rails 2.3.x应用程序中,我希望每次用户点击特定链接时都更新记录。
例如。访问www.sito.com/tracks/1我更新了这样的记录:
r = Record.find(params[:id])
r.views = r.views + 1
r.save
以下是我的疑惑:
更新
使用乐观锁定的组合,我这样做了:
添加了" lock_version"列到记录表
将代码更改为:
Record.transaction do
begin
@record.update_attributes(:views => @record.views + 1)
rescue ActiveRecord::StaleObjectError
retry
end
end
答案 0 :(得分:0)
取决于。
如果你很幸运,两个请求都将正常处理,计数器将增加两次。
但是,很可能会丢失一个或另一个增量。您正在查看的特定方案正式描述为Race Condition,是多线程应用程序中的标准复杂功能。
这是一个很好的起点: