繁体   English   中英

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

[英]Any recommendations for implementing a user-defined workflow in Ruby?

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

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

文档:

Ruote文档页面1

Ruote文档页面2

创建Ruote流程

对于状态机,让我提出另一个建议: 工作流

所有宝石都使用“预定义”状态的原因是,通常情况下,状态涉及一些红宝石代码:您说诸如“从此状态到此状态的转换发生时,执行此代码”或“从此处转换之前”之类的内容到那里,检查这个红宝石卫士”。 如果状态未经过某种“硬编码”,则无法实现这种功能。

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

  • 名称(字符串)
  • 创建此状态的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参考

您是否在寻找有限状态机之类的东西?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM