在 Rails 工作流 gem 上是否有 Ruby 具有用户定义的状态?

Are there Ruby on Rails workflow gems with user-defined states?

我在 Rails 应用程序上开发 Ruby,现在正在寻找无需任何编程即可配置状态的工作流 gem。

我找到了一些 gems: rails_workflow, state_machine, workflow.

但据我了解,这些 gems 假定状态将被硬编码,例如 workflow gem 状态:

class Article
  include Workflow
  workflow do
    state :new do
      event :submit, :transitions_to => :awaiting_review
    end
    state :awaiting_review do
      event :review, :transitions_to => :being_reviewed
    end
    state :being_reviewed do
      event :accept, :transitions_to => :accepted
      event :reject, :transitions_to => :rejected
    end
    state :accepted
    state :rejected
  end
end

我需要我的应用程序用户状态可以在没有开发人员的情况下自行配置状态和转换条件。

Redmine 已经有这个功能,但是它是现成的系统,不是 gem 我可以连接到我的应用程序

是否有 gem 具有此类功能?

你可以复制 redmine ,或者使用这个轻松构建你自己的服务对象 gem :

Waterfall

这是一个全新的 gem ,我这周在 RubyLille 遇到了他的作者。 这是一种优雅地链接类似回调的方法并获得由 rails 管理的错误的方法,您可以使用它构建一个健壮的状态机。

我根据之前的评论设计了以下解决方案。使用 gem state_machine,然后您可以使用 ActiveRecord 定义状态机的转换,如下所示:

定义一个包含列 'to'、'from' 和 'on' 的转换模型。他们都将 string 作为他们的数据类型。

状态定义如下:

Transition.create(:from => "parked", :to => "idling", :on => "ignite")

之后你需要修改你的转换方法如下:

def transitions
  transitions_data = []
  Transition.all.each do |transition|
    transitions_data << { transition.from.to_sym => transition.to.to_sym, :on => transition.on.to_sym }  
  end
  transitions_data
end

显然,如果你有不止一台机器,你可以有一些其他的列,比如 'machine_name' 并在那里存储机器名称并只获取那些行。

正如原回答者所说"This is just one example, and could be much further optimized. I'll leave that part to you. Hopefully this will give you a good start."

我希望这能为您指明正确的方向。

来源:

SOstate_machine Gem

rails_workflow gem 与状态无关:)

大多数状态转换引擎使用状态来模拟本质上错误的进程配置。如果某些应用程序有流程(意味着具有不同操作、用户操作、任务等的业务逻辑流程)——那么它应该使用流程 management 并且大多数 gems 与状态到状态转换使用状态转换只是为了粗略地模拟工作流程。

状态转换逻辑有很多缺点 - rails_workflow 与状态无关 :) 它与流程配置、监视和控制有关。