【发布时间】:2021-05-05 17:27:31
【问题描述】:
在我的应用中,多个用户可以编辑数据库中的同一个对象。如果 user1 将数据加载到表单中,而 user2 在 user1 加载表单但在 user1 提交数据之前将数据写入数据库,我想阻止保存 user1 的数据。
Rails 中是否有任何内置功能,或者 Ruby/Rails 社区库中是否有任何东西可以解决这个问题?
我可以自己尝试,通过在所有模型read_at 上具有所有 UI 元素发回的虚拟属性。但我知道问题可能比看起来更复杂,如果有内置的解决方案,我想知道。
除非预先构建解决方案,否则我是否可以考虑使用特定于 Rails 的特性?我知道有一个表单令牌?我想知道我是否可以从中获取时间信息?
【问题讨论】:
-
您可以尝试在表单中设置一个隐藏字段
last_updated_at,该字段在呈现表单时应该具有记录的updated_at的值。如果其他人更新它,updated_at会发生变化,您可以拒绝第一个用户的表单提交为params[:last_updated_at] < record.updated_at。
标签: ruby-on-rails ruby staledataexception