我将使用state_machine来构建一个多步骤表单,在转换到下一步之前,每个步骤的字段都需要进行验证。
以下是我的模型:
然而,这并没有按预期工作:
转到下一步骤由于验证失败而无法进行,这正是预料中的。
然而,当我检查验证错误时,没有像预期的那样未能通过验证的是“Field1”,而是“Field2”。它似乎在运行正在转换到的状态的验证,而不是当前状态的验证。我做错了什么?非常感谢。
以下是我的模型:
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"]
然而,当我检查验证错误时,没有像预期的那样未能通过验证的是“Field1”,而是“Field2”。它似乎在运行正在转换到的状态的验证,而不是当前状态的验证。我做错了什么?非常感谢。
f.next
后,状态仍然是 'step1'。验证正在阻止转换。 - gjb