冲突更新模型(Rails)

时间:2018-03-08 06:26:19

标签: ruby-on-rails model token updates conflict

我的第一个问题并不是专门针对rails,而是关于良好实践的更一般性问题。

假设我的API只有一个Model:Post。几乎没有记录。

  • 修改特定Post记录但没有调用API的服务的第一个客户端。所以他会在本地存储修改,直到获得服务。
  • 第二个客户端,修改相同的记录,但能够调用API在服务器端修改此记录,而第一个客户端尚未推送本地修改。

回到第一个客户,当他到达服务。所以,他会尝试推动存储的本地修改。 两种情况:

  1. 我是否应该阻止他的推送修改,因为第二个客户已经在时间上推进了修改?
  2. 我是否仍应从第一个客户端推送修改并覆盖第二个客户端的修改?
  3. 如果是第一个答案,我该如何管理? 我正在考虑使用修改请求发送的“ update_token ”或时间戳。服务器检查令牌时间戳是否匹配,然后修改记录并更新令牌 / 记录。 这是一个好习惯吗?

1 个答案:

答案 0 :(得分:0)

我认为您应该使用辅助表来同步来自不同设备的所有这些记录,并让您的逻辑决定丢弃哪一个以及保存哪一个,并且在决定操作后,您可以从同步表中删除该条目。

device_id |属性(JSON)。 | modified_at | post_id

1 | {data:{something:here}} | 8-7-2018 2:30:44 | 4

2 | {data:{something:here}} | 8-7-2018 2:40:44 | 4

现在,您可以让代码决定从上述条目中保留哪一个。

您的逻辑可以基于修改日期或其他一些重要属性,例如价格(我只是假设)

您也可以使用套接字或类似的东西(pub | sub),因此根据您的操作,您可以将保存的记录发布到在该帖子上工作的所有侦听设备,这将使用最新条目更新现有记录。

最佳, Pramod