Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否有用户定义状态的Ruby on Rails工作流gem?_Ruby On Rails_Rubygems_Workflow - Fatal编程技术网

Ruby on rails 是否有用户定义状态的Ruby on Rails工作流gem?

Ruby on rails 是否有用户定义状态的Ruby on Rails工作流gem?,ruby-on-rails,rubygems,workflow,Ruby On Rails,Rubygems,Workflow,我开发了RubyonRails应用程序,现在正在寻找无需任何编程即可配置状态的工作流gem 我发现了一些宝石: 但据我所知,这些gem假设状态将是硬编码的,例如gem状态: class Article include Workflow workflow do state :new do event :submit, :transitions_to => :awaiting_review end state :awaiting_review do

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

我发现了一些宝石:

但据我所知,这些gem假设状态将是硬编码的,例如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
我需要我的应用程序用户可以自己配置状态和转换条件,而无需开发人员

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


是否有具有此类功能的gem?

您可以复制redmine,或使用此gem轻松构建您自己的服务对象:

这是一块全新的宝石,我本周在鲁比列见到了他的作者。
这是一种优雅地链接类回调方法并由rails管理错误的方法,您可以用它构建一个健壮的状态机。

我根据前面的评论设计了以下解决方案。使用gem
状态机
,然后可以使用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
在此之后,您需要按如下方式修改过渡方法:

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
def转换
转换\u数据=[]
Transition.all.each do | Transition|
transitions_data transition.to.to_sym,:on=>transition.on.to_sym}
结束
数据转换
结束
显然,如果您有多台机器,您可以使用其他列,如“machine\u name”,并将机器名存储在那里,然后仅获取这些行

正如最初回答这个问题的人所说:“这只是一个例子,可以进一步优化。我将把这部分留给你。希望这会给你一个好的开始。”

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

资料来源:


rails\u工作流gem与状态无关:)

大多数状态转换引擎使用状态来模拟进程配置,这在本质上是错误的。如果某些应用程序具有流程(即具有不同操作、用户操作、任务等的业务逻辑流程),那么它应该使用流程管理,并且大多数具有状态到状态转换的GEM使用状态转换来大致模拟工作流


状态转换逻辑有很多缺点,所以再说一遍,rails_工作流与状态无关:)它与流程配置、监视和控制有关

想知道这方面的任何解决方案;我可以写一个有想法的答案,但我还没有找到一个gem你可以在这个解决方案上工作,我发现阅读它很有希望,但我认为这个解决方案可以扩展到任何用途:我不推荐
工作流
gem。。。我继承了一个使用它的遗留应用程序,我发现它有缺陷并不奇怪,因为它不再被维护。我以前使用过
AASM
,没有任何问题,尽管它不是为基于数据库的工作流而设计的。我没有使用过
rails\u工作流
,但它声称已经支持用户可配置的工作流。OP将如何从
瀑布
中的数据库中定义状态,一个例子可能会有所帮助。我不是舒尔,我清楚地理解你的问题,请将我称为“OP”。我的意思是,我们如何定义状态而不在
瀑布
中进行实际编码。OP想从数据库中定义状态,但我在瀑布中并没有看到,或者我遗漏了一些东西,所以我请你们举个例子。@plombix,OP翻译为原始posteri不明白这一点,我认为这是代码的美学问题。瀑布使一个优雅的结构,以支持模型的验证和方法/范围,它不会定义自己的状态,我的巴迪喜欢这种方法!!