在Rails中创建动态审批系统



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

例如,假设我创建了一个"休假请求"文档。作为一名用户,我可以声称休假申请必须得到我的直线经理和人力资源部的人的批准,然后才能处于"批准"状态。

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

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

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

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