gpt4 book ai didi

ruby-on-rails - 使用 state_machine 进行条件验证

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:22 25 4
gpt4 key购买 nike

我正在使用 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"]

但是,当我检查验证错误时,未能按预期验证的不是“Field1”,而是“Field2”。它似乎正在为正在转换到的状态而不是当前状态运行验证。

我做错了什么?

非常感谢。

最佳答案

我只是猜测,在这里,但也许它运行验证

state :step2 do 
validates_presence_of :field2
end

当尝试过渡到第 2 步时?

也许您不需要在第一步进行验证,而是将所有验证移到一个步骤:

state :step2 do 
validates_presence_of :field1
end
state :step3 do
validates_presence_of :field2
end
state :final do
validates_presence_of :field3
end

关于ruby-on-rails - 使用 state_machine 进行条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com