How do I create dynamic definitions for state machine based on user defined data in DB

柔情痞子 提交于 2020-01-01 17:09:14

问题


I am trying to write an application that will allow users to manage workflows using the State Machine gem but I am not sure how to proceed in allowing users to define their own state machines using the State Machine gem for ruby.

In the dynamic definitions portion of the gem documentation it says that I should be able to do this by replacing code like this below with a data source.

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

I am not sure how to go about doing this. how do I define the transistions from a database?


回答1:


Because transitions is just a method, you could implement this any way you want. Here's one possible way.

I'll assume you're using ActiveRecord.

Define a Transition model and an associated transitions table with to, from, and on columns, all strings. Then you can start defining transitions, e.g.:

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

Then in your transitions method:

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

You can then use the other code in the documentation you linked to create a state machine dynamically.

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.



来源:https://stackoverflow.com/questions/14349141/how-do-i-create-dynamic-definitions-for-state-machine-based-on-user-defined-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!