Rails乐观锁定手动锁定检查:任何问题



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

Rails乐观锁定似乎是解决过期更新问题的答案。

但是对于用户体验来说,如果Rails控制器可以将用户A的模型版本与当前版本进行比较,而无需等到更新操作来确定模型是否已经过时(由于用户B正在并发地更新相关模型),那么可以呈现另一种视图,指示用户A需要检查更新的模型。

手动检查控制器中的:lock_version字段并将其与params[]版本进行比较是否有任何问题或问题?是否有一些内置的或"正式"的方式来做这件事,或者控制器应该明确地做检查?

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

Ryan Singer提出了另一种方法,使用updated_at时间戳和验证一起执行检查,然后使用rails脏跟踪向用户显示更改的内容。您可以在Rails Cast中看到它:http://railscasts.com/episodes/59-optimistic-locking-revised

我一直在使用这种技术,我对它很满意,虽然给出的例子没有涵盖更复杂的情况下,多个模型涉及的行动,或者你需要确保模型关联没有改变,以及等

相关内容

  • 没有找到相关文章

最新更新