1

クラスの承認を管理するためにstate_machineを使用しています。ActiveRecord::Base

状態を整数として保存できるように、カスタムstate値を使用しています。これはうまく機能しますが、StateMachine::MachineRails の起動時に (から)次の警告が表示されます。

# Both MyClass and its :state machine have defined a different default
# for "state". Use only one or the other for defining defaults to avoid
# unexpected behaviors.

予期しない動作は観察していないので、これは大したことではありません。このエラーを解消するために:default、テーブル スキーマ (例: ) から値を削除できることはわかっていますが、別の方法で行うことをお勧めします。:default => 0state_machine

コードは次のstate_machineとおりです (my_class.rb 内):

# ...
States = {
  :pending => 0,
  :approved => 1,
  :rejected => 2,
}

state_machine :state, :initial => :pending do
  States.each do |name, value|
    state name, :value => value
  end

  event :approve do
    transition all => :approved
  end

  event :reject do
    transition all => :rejected
  end
end

問題はstate_machine、デフォルト値が実際には 0 であるべきだと認識する前に、初期値/デフォルト値を「保留中」に設定したいということです。

状態の事前初期化を定義することは可能ですか? Stateオブジェクトまたは aStateCollectionを初期化子に渡すことができればいいのですMachineが、それは可能ではないようです ( https://github.com/pluginaweek/state_machine/blob/master/lib/state_machineのソースを見てください)。 /machine.rb )。

4

0 に答える 0