是否有Ruby on Rails工作流宝石具有用户定义的状态?

Gen*_*ure 4 workflow rubygems ruby-on-rails

我开发了Ruby on Rails应用程序,现在正在寻找允许配置状态而无需任何编程的工作流gem.

我发现了一些宝石:rails_workflow,state_machine,工作流程.

但据我所知,这些宝石假设状态将是硬编码的,例如工作流宝石状态:

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
Run Code Online (Sandbox Code Playgroud)

我需要我的应用程序用户状态可以自己配置状态和转换条件,而无需开发人员.

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

有没有这些功能的宝石?

Jag*_*ngh 5

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

使用列,"到","从"和"打开"定义过渡模型.它们都将string作为数据类型.

州将定义如下:

Transition.create(:from => "parked", :to => "idling", :on => "ignite")
Run Code Online (Sandbox Code Playgroud)

在此之后,您需要修改您的过渡方法,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

显然,如果你有多台机器,你可以使用其他一些列,例如'machine_name',并在那里存储机器名,只获取那些行.

正如回答此问题的原始人所说:"这只是一个例子,可以进一步优化.我会把这部分留给你.希望这会给你一个良好的开端."

我希望这能指出你正确的方向.

资源:

SOstate_machine Gem