Каков правильный синтаксис для выполнения проверки перед переходом в state_machine gem?
Я пробовал следующее,
before_transition :apple => :orange do
validate :validate_core
end
def validate_core
if core.things.blank?
errors.add(:core, 'must have one thing')
end
end
Но я получаю следующую ошибку:
undefined method `validate' for #<StateMachine::Machine:0x007ffed73e0bd8>
Я также пробовал написать его, как
state :orange do
validate :validate_core
end
Но это приводит к откату после сохранения записи, что является менее идеальным. Я бы хотел, чтобы конечный автомат сначала переключился на :orange
.
Основная проблема заключается в том, что в моем контроллере у меня есть логика, которая опирается на результат object.save
. Проверка, которую у меня есть для моего конечного автомата, не срабатывает до момента первоначального сохранения, поэтому сохранение возвращается как истинное, а контроллер переходит к логике, он не должен ударяться, если объект недействителен.
Я работал над этим, проверяя корректность вручную в дополнение к проверке сохранения, но похоже, что должен быть способ проверки достоверности перед сохранением объекта.