Вы можете включить свой aasm do
блок? Раньше я не использовал state_machine
, но это не то, как один типично использует aasm
. Вам не нужно будет когда-либо отправлять переход; скорее вы просто вызываете событие, и ваш переход состояний происходит автоматически на основе созданных вами правил события/перехода.
Вот небольшой пример.
aasm do
state :draft
state :review
state :accepted
state :rejected
event :submit do
transitions :from => :draft, :to => :review
transitions :from => :review, :to => :accepted
end
event :reject do
transitions :form => :review, :to => :rejected
end
end
Теперь в приведенном выше примере, если объект находится в состоянии черновика, и вы называете object.submit
это будет переход от draft to review
и если вы находитесь в обзоре состояния object.submit
будет переход от review to accepted
.
Также обратите внимание, что вместо вызова события и последующего вызова save вы можете добавить !
к имени события, и сохранение произойдет автоматически после завершения перехода.
Таким образом, вместо
object.submit
object.save
Вы можете просто позвонить
object.submit!
Я нуждался в этом в моем проекте также и создали беспокойство, чтобы сделать это: https://gist.github.com/ spieker/a01966e2dd586b47b04f –