Я использую state_machine для создания многошаговой формы с полями для каждого шага, проверенными перед переходом к следующему шагу.
Это моя модель:
class Foo < ActiveRecord::Base
state_machine :initial => :step1 do
event :next do
transition :step1 => :step2
transition :step2 => :step3
end
event :previous do
transition :step3 => :step2
transition :step2 => :step1
end
state :step1 do
validates_presence_of :field1
end
state :step2 do
validates_presence_of :field2
end
state :step3 do
validates_presence_of :field3
end
end
end
Однако это не работает должным образом:
> f = Foo.new
=> #<Foo id: nil, field1: nil, field2: nil, field3: nil, state: "step1", created_at: nil, updated_at: nil>
Foo инициализируется с состоянием 'step1'.Пока все хорошо.
> f.next
=> false
Переход к следующему шагу завершается неудачно из-за проверки, как и ожидалось.
> f.errors.full_messages
=> ["Field2 can't be blank"]
Однако, когда я проверяю ошибки проверки, это не так«Поле1», которое не удалось проверить, как ожидалось, а «Поле2».Похоже, что он выполняет проверки состояния, в которое выполняется переход, а не текущего состояния.
Что я делаю не так?
Большое спасибо.