我的注册包含两个步骤。在第一个中,新用户将设置他的名字,电子邮件和密码。然后他点击“注册”按钮,并在页面上重定向,这是注册表格的第二部分(约5-7个字段)。
我已在所有输入(7-10个字段)上设置了验证规则。问题是,当我填写表单的第一部分,然后单击“注册”按钮时,我看到验证错误,因为表单第二部分的字段无效。
如何避免这种行为?
谢谢
答案 0 :(得分: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
。
请注意,我使用的值和名称不是非常具有描述性/意义,您更了解如何命名它们:)