在Rails中创建动态审批系统

时间:2014-02-11 07:19:38

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

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

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

我已经探索过使用大量的状态机宝石和CanCan来获取权限,但我无法理解如何动态创建这些工作流程。我想在数据库中序列化工作流程,但这意味着每次我想确定等待批准的文档批准者文档列表时,我将不得不反序列化“等待批准”状态的文档列表中的每个工作流。

有没有人对如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:0)

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

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