我想弄清楚如何在Rails中实现动态审批系统。场景是这样的:我有一个模型对象(文档),在创建时,用户可以为其分配批准流程。该文档可以由用户填写和提交。然后,文件在被“批准”之前通过批准流程。
例如,假设我创建了一个“请假”文档。作为用户,我可以声称请假请求必须得到我的直线经理和人力资源部门的批准,然后才能进入“已批准”状态。
我已经探索过使用大量的状态机宝石和CanCan来获取权限,但我无法理解如何动态创建这些工作流程。我想在数据库中序列化工作流程,但这意味着每次我想确定等待批准的文档批准者文档列表时,我将不得不反序列化“等待批准”状态的文档列表中的每个工作流。
有没有人对如何解决这个问题有任何想法?
答案 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