我想编写一个应用程序,允许用户管理使用工作流状态机的宝石 ,但我不知道如何在允许用户定义使用Ruby的状态机宝石自己的状态机进行。
在动态定义的宝石文档的一部分它说,我应该能够通过与数据源更换下面这样的代码来做到这一点。
def transitions
[
{:parked => :idling, :on => :ignite},
{:idling => :first_gear, :first_gear => :second_gear, :on => :shift_up}
# ...
]
end
我不知道如何去这样做。 我该如何定义从数据库中transistions?
因为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