我正在建立一个系统,我有像/document/123
这样的路线。
在我的应用程序中,我有许多用户最终将编辑这些文档,我不希望一个用户编辑另一个用户的同一文档。提供诸如“嘿,用户x正在编辑此文档”之类的反馈会很好。
我怎样才能在Rails中实现这一目标?
我认为ActionCable
将是答案,但我仍然输了。有一些材料或类似代码会很好,所以我可以继续完成这项任务。
您可以更新文档,为用户提供独占租约以进行更新。当另一个用户尝试更新它时,他会收到一条错误消息,通知他该文档无法租借。当租约到期或第一个用户保存时,可以再次编辑文档。
示例/伪代码(未测试,请注意 - 不是线程安全的):
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
你是对的,答案是Action Cable,如果你想通知正在编辑的用户以及何时发布文件。
有很多可用的资源,但您首先检查这些:
但是,如果您只是想通知用户该文档是由其他用户编辑的,则可以使用锁定/解锁机制。 @mrzasa在他的回答或here中描述了基础知识。
您只需要在edit
操作上通知用户该文档已被锁定。仅当current_user是锁定文档的用户时,才会在update
上解锁该文档。