2

ユーザーがState Machine gemを使用してワークフローを管理できるようにするアプリケーションを作成しようとしていますが、ユーザーが Ruby の State Machine gem を使用して独自のステート マシンを定義できるようにする方法がわかりません。

gem ドキュメントの動的定義の部分では、以下のようなコードをデータ ソースに置き換えることでこれを実行できるはずだと書かれています。

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

これを行う方法がわかりません。データベースから遷移を定義するにはどうすればよいですか?

4

1 に答える 1

6

は単なるメソッドであるためtransitions、これは任意の方法で実装できます。考えられる方法の 1 つを次に示します。

ActiveRecord を使用していると仮定します。

移行モデルと、to、from、および on 列のすべての文字列を含む関連する移行テーブルを定義します。次に、トランジションの定義を開始できます。たとえば、次のようになります。

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

次に、リンクしたドキュメントの他のコードを使用して、ステート マシンを動的に作成できます。

これはほんの一例であり、さらに最適化することができます。その部分はお任せします。うまくいけば、これはあなたに良いスタートを与えるでしょう.

于 2013-01-16T01:02:25.673 に答える