【问题标题】:Rails - how to validate 2-steps form?Rails - 如何验证两步表单?
【发布时间】:2026-02-10 09:30:01
【问题描述】:
我的注册包含两个步骤。在第一个中,新用户将设置他的姓名、电子邮件和密码。然后他点击“注册”按钮并被重定向到注册表格第二部分的页面(大约 5-7 个字段)。
我已经为所有输入(7-10 个字段)设置了验证规则。问题是,当我填写表单的第一部分然后单击“注册”按钮时,我看到验证错误,因为表单第二部分的字段无效。
如何避免这种行为?
谢谢
【问题讨论】:
标签:
ruby-on-rails
ruby
validation
registration
wizard
【解决方案1】:
您可以定义一个虚拟属性,用于确定在哪个步骤验证哪些属性,然后在with_options 上使用该属性的值来验证每个步骤的必填字段。
类似以下内容:
在你的模型中:
class MyModal < ActiveRecord::Base
attr_accessor :validate_step
with_options if: :validate_step_one? do |o|
o.validates :name, presence: true
o.validates :email, presence: true
o.validates :password, presence: true
end
with_options if: :validate_step_two? do |o|
...
end
private:
def validate_step_one?
self.validate_step == 'validate_first_step'
end
def validate_step_two?
self.validate_step == 'validate_second_step'
end
end
然后在你的控制器中:
class MyRegistrationController < ApplicationController
def show
case step
when :first_step
user.validate_step = 'validate_first_step'
when :second_step
user.validate_step = 'validate_second_step'
end
end
end
在您的控制器中,在您构建对象的操作中,您需要根据向导中的当前步骤分配validate_first_step 或validate_second_step。
请注意,我使用的值和名称不是很具有描述性/意义,您会更好地知道如何命名它们:)