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

时间:2018-02-28 12:16:14

标签: ruby-on-rails ruby

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

在我的应用程序中,我有很多用户最终会编辑这些文档,我不希望一个用户编辑另一个用户的同一文档。提供像"嘿,用户x正在编辑此文档"这样的反馈会很好。

如何在Rails中实现这一目标?

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

2 个答案:

答案 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上解锁文档。