Я использую rubyist-aasm конечный автомат для обработки различных состояний в моем Объекте-событии (инициализированное событие, обсужденное событие, опубликованное событие, и т.д.). Я добавил защиту для предотвращения изменений состояния, когда определенные условия не соблюдены.
Это все хорошо работает, но это не показывает ошибок, когда изменение состояния было отклонено защитой. Какая-либо идея, как я вижу состояние, не изменилась? Я мог проверить состояния вручную, но это походит на ужасное решение.
aasm_state :firststate
aasm_state :secondstate
aasm_event :approve do
transitions :to => :secondstate, :from => [:firststate], :guard => :has_a_price?
end
def has_a_price?
self.price.present?
end
Я знаю, что в рубиисте 2.0.2 можно вызвать добавление '!' к вызову метода перехода, который вернет false, если переход не удался. Допустим, у вас есть метод контроллера с именем confirm:
def approve
@event = Event.find params[:id]
if @event.approve!
# transition occurred
else
# handle the failed transition (flash or errors)
end
end
Дайте мне знать, что вы думаете?