如果两个人一次提交编辑会发生什么

时间:2010-06-11 22:48:09

标签: ruby-on-rails concurrency locking optimistic-locking

这可能是一个愚蠢的问题,但我想知道如果两个用户一次编辑一些数据然后同时点击提交会发生什么,我假设Rails一个接一个地处理请求,所以有人会收到错误消息,但这是正确的吗?

由于

一旦有人编辑了数据,我就不再希望它可以被访问或编辑了,这是通过验证来处理的

我的模型也得到了验证

def account_active
    if self.active == true
      return true
    else
      return false
    end
end

如果验证通过

,则active是控制器内的布尔值集

4 个答案:

答案 0 :(得分:2)

正如其他答案所述,最新的写作获胜。

您可能不认为这是一个问题,但由于没有悲观的锁定阻止两个用户同时打开相同的编辑表单,两个用户可能会认为他们正在进行的更改将被保存。

通过在您的模型上使用版本号或时间戳来解决此问题,系统可以使用该版本号或时间戳来告诉“用户正在编辑版本1,但现在有版本2”并阻止第二个用户覆盖第一个用户写。

Ryan Bates令人敬畏的Railscasts系列报道了如何在Railscast 59: Optimistic Locking中设置它的基础知识。

答案 1 :(得分:1)

您的Web服务器守护程序将一个接一个地处理请求;无论哪个请求最后处理成为最新的更新。除非你写一些逻辑来处理这种情况,否则没有人会收到错误信息。

答案 2 :(得分:0)

与涉及盲写的所有竞争条件一样,除非你采取措施改变,否则最后一次获胜。

答案 3 :(得分:0)

您的原始问题已得到解答,但我会补充一下:

对于验证,您只需执行以下操作

def account_active
  self.active?
end

Ruby隐式返回方法的最后一行。