如何创建一个基于数据库的用户定义的数据,状态机动态定义(How do I create dynami

2019-08-07 01:16发布

我想编写一个应用程序,允许用户管理使用工作流状态机的宝石 ,但我不知道如何在允许用户定义使用Ruby的状态机宝石自己的状态机进行。

在动态定义的宝石文档的一部分它说,我应该能够通过与数据源更换下面这样的代码来做到这一点。

   def transitions
    [
      {:parked => :idling, :on => :ignite},
      {:idling => :first_gear, :first_gear => :second_gear, :on => :shift_up}
      # ...
    ]
  end

我不知道如何去这样做。 我该如何定义从数据库中transistions?

Answer 1:

因为transitions只是一个方法,你可以实现这一点,你想要的任何方式。 这里是一个可能的方式。

我假设你正在使用的ActiveRecord。

定义一个过渡模式和相关的转换表一起,从,并在列,所有的字符串。 然后你就可以开始定义的转换,例如:

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

然后,您可以使用文档中您链接到动态创建一个状态机的其他代码。

这只是一个例子,可能很多进一步优化。 我会离开的那部分给你。 希望这会给你一个良好的开端。



文章来源: How do I create dynamic definitions for state machine based on user defined data in DB