0

我有一个 Rails 应用程序,其中模型的特定表单提交是一个两步过程:在第一次提交时,Rails 控制器发出模式确认表单的呈现,从中调用更新操作或取消整个事情。

Rails 乐观锁定似乎是处理过时更新的答案。

但是为了用户体验,如果 Rails 控制器可以将用户 A 的模型版本与当前版本进行比较,而无需等到更新操作来确定模型是否已经过时(由于用户 B 正在同时更新有问题的模型),然后可以呈现另一种视图,向用户 A 指示他需要检查更新的模型。

手动检查控制器中的 :lock_version 字段并将其与 params[] 版本进行比较是否存在任何问题或陷阱?是否有一些内置或“正式”的方式来执行此操作,或者控制器是否应该明确地进行检查?

4

1 回答 1

0

我认为 lock_version 的主要问题是它是一刀切的(即你不能为不同的上下文设置不同的锁),并且锁失败会引发一个陈旧的对象异常,这对用户来说并不是特别好。

Ryan Singer 提出了一种替代方法,它使用 updated_at 时间戳和验证来执行检查,然后使用 rails 脏跟踪向用户显示发生了什么变化。你可以在 Rails Cast 中看到它:http ://railscasts.com/episodes/59-optimistic-locking-revised

我一直在使用这种技术并且对它很满意,尽管给出的示例没有涵盖更复杂的情况,即多个模型参与到操作中,或者您需要确保模型关联也没有改变等。

于 2013-07-15T00:38:04.300 回答