проверка состояния if-else в конечной машине рельсов - PullRequest
0 голосов
/ 02 января 2012

Я разрабатываю приложение в рельсах, где я использовал state_machine (https://github.com/pluginaweek/state_machine/).

Здесь я хотел проверить состояние в одном состоянии, основываясь на условии состояние меняется из другого состояния. (то есть рассмотрим состояние1, состояние2 и state3 - это состояния, если (a> b) {state1 => state2} else {state1 => state3}) ,

Я хотел знать, как это будет реализовано в машине состояний. пожалуйста, помогите мне в этом

1 Ответ

2 голосов
/ 02 января 2012

В state_machine вы определяете события, которые изменяют состояние базового объекта. Вы также можете установить атрибут состояния в желаемое состояние.

В вашем случае вы бы сделали:

a.state = a > b ? "state2" : "state3"
a.save!

Вы также можете проверить состояние с помощью:

a.state1?

Что вы должны сделать, это определить событие, которое описывает переход из состояния1 в состояние2 или состояние3. Например:

state_machines :state, initial: :state1 do
  ... 

  event :go_to_state2 do
    transition state1: :state2
  end

  event :go_to_state3 do
    transition state1: :state3
  end

  ...
end

Затем вы переходите в следующее состояние:

if a > b
  a.go_to_state2!
else
  a.go_to_state3!
end

Использование событий - намного более чистый способ манипулирования состоянием. Все это описано в Readme на странице github плагина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...