如果有人点击任何产品编辑页面,则会显示一条消息 已打开/在同一记录/页面中。
如何跟踪用户对同一记录的编辑操作的访问权限?最终我想将消息显示为“有人已编辑此产品”以避免覆盖 多个用户之间的过程。
请分享您的想法。
答案 0 :(得分:2)
对此的天真解决方案可能是添加一个关联说:
class Product < ActiveRecord::Base
belongs_to :edited_by, class_name: 'User', foreign_key: 'edited_by_user_id'
end
class User < ActiveRecord::Base
has_many :edits, class_name: 'Product', foreign_key: 'edited_by_user_id'
end
然后:
/edit
页面,将product.edited_by
设置为该用户。/edit
页面。您可以检查是否设置了该产品的edited_by
,然后向他显示该消息;阻止他更新同一产品。edited_by
。但这是成本。围绕这个问题有很多个案例:
edited_by
关联。但永远不要更新记录(因此永远不会让其他用户更新产品)edited_by
可能永远不会被重置。因此,我建议使用Optimistic Locking代替。您可以为产品型号添加:lock_version
的迁移。这样可以防止在此方案中保存stale object,从而防止此类冲突
用户#2(或第一个)尝试更新旧记录时会引发异常ActiveRecord::StaleObjectError
,您可以通过处理该记录来显示自定义消息。
希望有所帮助:)