Rails - 如何验证两步表单?

时间:2013-09-04 14:37:21

标签: ruby-on-rails ruby validation registration wizard

我的注册包含两个步骤。在第一个中,新用户将设置他的名字,电子邮件和密码。然后他点击“注册”按钮,并在页面上重定向,这是注册表格的第二部分(约5-7个字段)。

我已在所有输入(7-10个字段)上设置了验证规则。问题是,当我填写表单的第一部分,然后单击“注册”按钮时,我看到验证错误,因为表单第二部分的字段无效。

如何避免这种行为?

谢谢

1 个答案:

答案 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_stepvalidate_second_step

请注意,我使用的值和名称不是非常具有描述性/意义,您更了解如何命名它们:)