【问题标题】:Creating a dynamic approval system in Rails在 Rails 中创建动态审批系统
【发布时间】:2014-02-11 16:18:33
【问题描述】:

我正在尝试弄清楚如何在 Rails 中实现动态审批系统。场景是这样的:我有一个模型对象(一个文档),当创建它时,用户可以分配一个批准流。该文件可以由用户填写和提交。然后文档在“批准”之前经过批准流程。

例如,假设我创建了一个“请假请求”文档。作为用户,我可以声称请假请求必须得到我的直线经理和 HR 人员的批准,然后才能处于“已批准”状态。

我已经探索过使用许多状态机 gem 和 CanCan 来获得权限,但我无法完全理解如何动态创建这些工作流。我考虑过序列化数据库中的工作流,但这意味着每次我想确定等待批准的文档的文档审批者列表时,我都必须反序列化处于“等待批准”状态的文档列表中的每个工作流。

有没有人知道如何解决这个问题?

【问题讨论】:

  • 你能解释一下你所说的“动态”是什么意思吗?您是说每个文档可能需要不同类型的用户批准,这是在创建文档时决定的?
  • 您好,感谢您的回复。所以我所说的动态的意思是,每个文档可能不仅有不同的批准者,而且通过这些批准者“批准”的路径也不同。因此,A 类文件可能必须由“HR 人员”批准,而 B 类文件可能必须由“HR 人员”“用户直线经理”批准。 C 类文档可能有“HR Manager”然后“line manager”的审批路径。更复杂的 D 类文档可能有“HR Manager”“Line Manager”然后“CEO”等审批路径。

标签: ruby-on-rails dynamic workflow cancan acts-as-state-machine


【解决方案1】:

我认为最好的解决方案是使用单独的表来存储批准者。您可以在创建文档时动态创建“审批者”,然后独立更改每个“审批者”。如果文档没有未经批准的“批准者”,则该文档已获得批准。

class Approver < ActiveRecord::Base
  attr_accessible :approved, role, ...
  # where role is manager or someone from HR or ...
  # approved is a status (true or false)

  belongs_to :document
  ...
end

class Document < ActiveRecord::Base
  has_many :approvers

  def approved?
    approvers.where(approved: false).empty?
  end

  ....
end

【讨论】:

  • 谢谢,请参阅我对@benjaminjosephw 回答的评论。我认为这种方法不会允许我想要构建的审批流程类型。特别是,您将如何允许 AND 和 FOLLOWED BY 路径?
  • 我听不懂你在说什么路径。
  • 好的,我又想到了你的答案,我喜欢它。将其标记为正确。谢谢!
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多