Я использую конечный автомат rubyist-aasm для обработки различных состояний в моем объекте Event (событие инициализировано, событие обсуждено, опубликовано событие и т. Д.). Я добавил охранников, чтобы предотвратить изменения состояния, когда определенные условия не выполняются.Обработка ошибок Rails с конечным автоматом 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
Спасибо, это будет работать в контроллере, но я хотел бы сохранить эти вещи в модели. С вашим решением я все еще мог бы использовать переход в другой модели без прохождения проверки. – Cimm
А, ок. IMO охранник на самом деле не является ошибкой проверки в отношении модели AR, но это защитник, который просто защищает переход от происходящего на конечной машине, лично я был бы счастлив назвать! метод (в другой модели или контроллере) и проверку возврата. Вы не можете «увидеть» что-то, если не спросите правильно? Я мог быть совершенно неправым, поэтому я буду рад узнать, возникают ли какие-либо другие решения. Если вы действительно хотите получить ошибку проверки, вы можете добавить что-то вроде validates_presence_of: price,: if => "self.second_state?" – tsdbrown