显示在Rails中的给定路由上的用户

问题描述 投票:0回答:2

我正在建立一个系统,我有像/document/123这样的路线。

在我的应用程序中,我有许多用户最终将编辑这些文档,我不希望一个用户编辑另一个用户的同一文档。提供诸如“嘿,用户x正在编辑此文档”之类的反馈会很好。

我怎样才能在Rails中实现这一目标?

我认为ActionCable将是答案,但我仍然输了。有一些材料或类似代码会很好,所以我可以继续完成这项任务。

ruby-on-rails ruby
2个回答
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

0
投票

你是对的,答案是Action Cable,如果你想通知正在编辑的用户以及何时发布文件。

有很多可用的资源,但您首先检查这些:

但是,如果您只是想通知用户该文档是由其他用户编辑的,则可以使用锁定/解锁机制。 @mrzasa在他的回答或here中描述了基础知识。

您只需要在edit操作上通知用户该文档已被锁定。仅当current_user是锁定文档的用户时,才会在update上解锁该文档。

© www.soinside.com 2019 - 2024. All rights reserved.