2013-04-28 73 views
0

我有一个Rails应用程序,其中一个特定的表单提交模型是一个两步过程:在第一次提交时,rails控制器发出一个模态确认表单的呈现,从中可以调用更新操作或整个事件取消。Rails乐观锁定手动锁定检查:任何问题?

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

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

是否有与人工检查相关的任何问题或陷阱:lock_version现场控制器和比较它的PARAMS []的版本?是否有一些内置或“正式”的方式来执行此操作,或者控制器是否应该明确执行检查?

回答

0

我觉得跟lock_version的主要问题是,它是一个一刀切(即你不能有不同的上下文不同的锁),以及锁定异常抛出过期的对象例外,这是不是特别漂亮的用户。

赖恩·辛格已提出使用与验证执行检查相结合的的updated_at时间戳,然后使用轨道脏跟踪显示什么改变用户的另一种方法。您可以在Rails Cast中看到它:http://railscasts.com/episodes/59-optimistic-locking-revised

我一直在使用这种技术,并且很满意它,虽然给出的示例并未涵盖多个模型参与操作的更复杂情况,你需要确保模型关联没有改变等等。