2

我想要一个 gem 或解决方案,以便如果用户导航到另一个用户已经在编辑的记录的编辑视图,第二个用户会收到一个简单的 Flash 警告,表明其他人已经在编辑该记录。我不需要对记录进行任何乐观或悲观的锁定。我想找到一个已经有解决方案的宝石。如果不是我的思路是:

  • 在控制器的编辑操作中将记录 ID 和用户 ID 的记录保存到活动表中。
  • 导航到编辑视图时检查是否有任何其他记录。
  • 当记录更新或用户离开页面时,删除活动记录。

我看到的潜在问题:

  • 如果关闭浏览器窗口或关闭用户计算机(没有明确导航离开页面),则更新记录不再更新。

任何示例或正确方向的点都会很棒。

4

2 回答 2

0

您可以生成已加载对象的 md5 哈希(基于所有可编辑属性)和数据库中的对象并比较两者。如果它们不同,那么在您将对象加载到内存后有人更改了对象。

Digest::SHA2.hexdigest(<string made of all your editable attributes>)
于 2013-06-12T15:47:18.547 回答
0

我会为此使用redis。

将已编辑对象(“post:23322”)的类型和 id 标记为键,值将是当前正在编辑文档的用户 id 的数组(redis 的集合)。在密钥上设置过期 TTL 以确保它不会过期。

于 2013-06-13T08:00:01.583 回答