В state_machine как установить следующее состояние в зависимости от результата запуска события? - PullRequest
1 голос
/ 27 июля 2011

Я использую Aaron Pfeifer's state_machine gem в моем приложении Rails3 - это (все еще) изящное.и я хотел бы установить следующее состояние на основе результата.«Очевидный» подход, показанный здесь, не работает: он вызывает ошибку ArgumentError: :picked_many is not a known state value.

Как правильно установить состояние на основе результата события?(Или я просто думаю об этом неправильно?)

class MyModel < ActiveRecord::Base 
  state_machine :initial => :top do 
    event :pickanumber do
      transition any => any
    end 
    state :picked_zero 
    state :picked_one 
    state :picked_many 
  end 
  def pickanumber(n) 
    self.state = case n 
                 when 0 then :picked_zero 
                 when 1 then :picked_one 
                 else :picked_many 
                 end 
    super
  end 
end 

и пример прогона:

> m = MyModel.create 
=> #<MyModel id: 26, state: "top", ...>
> m.pickanumber(2) 
ArgumentError: :picked_many is not a known state value

1 Ответ

1 голос
/ 27 июля 2011

Состояние внутренне сохраняется как строка, а не как символ.

Это должно работать ...

def pickanumber(n)
    self.state = case n
                 when 0 then "picked_zero"
                 when 1 then "picked_one"
                 else "picked_many"
                 end
    super
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...