我正在建立一个系统,我有一条像/document/123
这样的路线。
在我的应用程序中,我有很多用户最终会编辑这些文档,我不希望一个用户编辑另一个用户的同一文档。提供像"嘿,用户x正在编辑此文档"这样的反馈会很好。
如何在Rails中实现这一目标?
我认为ActionCable
会是答案,但我仍然输了。有一些材料或类似代码会很好,所以我可以继续完成这项任务。
答案 0 :(得分:0)
您可以更新文档,为用户提供独家租约以进行更新。当另一个用户尝试更新它时,他会收到一条错误消息,通知他该文档无法租借。当租约到期或第一个用户保存时,可以再次编辑文档。
示例/伪代码(未经测试,请注意 - 不是线程安全的):
class Document
def lease!(user: time: 15.minutes)
fail DocumentLeased if leased? && !leased_to?(user)
update(leased_to: user, leased_until: Time.now + time)
end
def leased_to?(user)
leased_to == user
end
def leased?
leased_until > Time.now
end
def clear_lease
update(leased_to: nil, leased_until: nil)
end
end
class DocumentController
def edit
# ...
@document.lease_to(current_user)
end
def update
#...
@document.clear_lease
end
end
答案 1 :(得分:0)
你是对的,答案是Action Cable,如果你想通知正在编辑的用户以及何时发布文件。
有很多可用的资源,但您首先要检查这些资源:
但是,如果您只是想通知用户该文档是由其他用户编辑的,您可以使用锁定/解锁机制。 @mrzasa在答案或here中描述了基础知识。
您只需要在edit
操作时通知用户该文档已被锁定。仅当current_user是锁定文档的用户时,才会在update
上解锁文档。