1

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

谢谢

一旦一个人编辑了数据,我不希望它再被访问或编辑,这是由验证处理的

我在我的模型中也得到了这个验证

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

如果验证通过,则 active 是控制器内的布尔集

4

4 回答 4

2

正如其他答案中提到的那样,最新的写入获胜。

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

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

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

于 2010-06-11T23:30:54.770 回答
1

您的 Web 服务器守护进程将一个接一个地处理请求;最后处理的请求将成为最新的更新。除非您编写一些逻辑来处理此类情况,否则没有人会收到错误消息。

于 2010-06-11T23:00:07.497 回答
0

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

于 2010-06-11T22:58:02.897 回答
0

您的原始问题已得到解答,但我将添加以下内容:

对于验证,您可以简单地执行以下操作

def account_active
  self.active?
end

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

于 2010-06-11T23:35:36.787 回答