在Ruby中实现用户定义的工作流的任何建议?

时间:2010-04-19 05:32:09

标签: ruby-on-rails ruby workflow

我有兴趣创建一个系统,用户可以在其中定义工作流程中的步骤。 有没有宝石可以处理这个?我想到了一个状态机宝石,但它们似乎都是预先定义的状态。我一直在想也许我可以将状态机用于各个步骤类型......电子邮件步骤可能有几个状态[新建,已分配,已完成],工作流程可能只是这些有状态步骤的列表。还有其他解决方案吗?

3 个答案:

答案 0 :(得分:2)

试试Ruote。它是一个基于Ruby构建的完整工作流引擎。

文档:

Ruote Documentation page 1

Ruote Documentation page 2

Creating a Ruote Process

答案 1 :(得分:2)

对于状态机,让我建议另一个:workflow

所有宝石使用“预定义”状态的原因是因为通常会有一些与状态相关的ruby代码:你会说“当从这种状态转换到这种状态时,执行此代码”或“之前”从这里过渡到那里,检查这个红宝石警卫“。如果状态不是“硬编码”,则无法实现这种功能。

如果您只需要一个文本字段,而不执行任何代码,您可以使用一个简单的“状态”模型,其中包含:

  • 名称(字符串)
  • 创建此状态的user_id(如果使用更复杂的东西,则为group_id)
  • 此状态的模型。这可以是整数或字符串,具体取决于您的口味。
  • 状态parent_id(可以为null)。通常情况下,acts_as_tree会帮助您解决此问题。

假设您为模型使用user_id和字符串,那么电子邮件的状态下拉列表将填充如下:

@states = State.find(:conditions => {
  :user_id => current_user.id,
  :model_name => 'State',
  :parent_id => 4 #so you get the possible states that follow "New"
})

如果 需要在某些转换/保护时执行某些代码,则需要使用预定义状态。这也是可能的,但您必须稍微改变一下您的要求:不要让用户定义他们自己的状态,而是让他们从列表中“激活”其中一些状态。然后,“用户已激活此状态”将只是您的州系统中的另一个“守卫”。

编辑:添加了parent_id和acts_as_tree参考

答案 2 :(得分:0)

你在寻找像有限状态机这样的东西吗?

http://slagyr.github.com/statemachine/