首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4 validates_confirmation_of不点火

Rails 4 validates_confirmation_of不点火
EN

Stack Overflow用户
提问于 2015-09-22 20:10:03
回答 1查看 126关注 0票数 0

我知道我一定错过了一些简单的东西。我有一个包含validate_confirmation_of的模型。我知道它在我的模型中工作(我已经使用控制台测试过它),但是由于某种原因,表单上的确认字段似乎没有正确地链接到我的模型,因此模型认为确认字段是空白的,因此跳过了验证。

模型

代码语言:javascript
复制
class Person < ActiveRecord::Base
  enum status: { suspended: 0, pending_validation: 1, pending_setup: 2, registered: 3, unknown: 99 }

  EMAIL_REGEX = /\A[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}\Z/i

  validates :first_name, :presence => true, :length => { :maximum => 255 }
  validates :last_name, :presence => true, :length => { :maximum => 255 }
  validates :email_address, :presence => true, :length => { :maximum => 255 }, :uniqueness => true, :format => { :with => EMAIL_REGEX }, :confirmation => true
  validates :country_code, :presence => true

end

视图

代码语言:javascript
复制
<%= form_for @person, url: { action: 'create' } do |f| %>

  <fieldset class="registration">

    <legend>Your Information</legend>

      <div class="group column-1">
        <%= label_tag('First Name') %> <span class="required">*</span>
        <%= f.text_field :first_name, class: 'form-control', :tabindex => 1 %>

        <%= label_tag('Display Name') %>
        <%= f.text_field :display_name, class: 'form-control', :tabindex => 3 %>
      </div>

      <div class="group column-2">
        <%= label_tag('Last Name') %><span class="required">*</span>
        <%= f.text_field :last_name, class: 'form-control', :tabindex => 2 %>

        <%= label_tag('Country') %> <span class="required">*</span>
        <%= f.collection_select :country_code, Country.order(:name), :iso_code, :name, { :include_blank => true }, { :class => 'form-control', :tabindex => 4 } %>

      </div>

      <div class="column-full">
        <%= label_tag('Email Address') %> <span class="required">*</span>
        <%= f.text_field :email_address, class: 'form-control', :tabindex => 5 %>

        <%= label_tag('Confirm Email Address') %> <span class="required">*</span>
        <%= f.text_field :email_address_confirmation, class: 'form-control', :tabindex => 6 %>
      </div>

      <div class="checkbox">
        <label>
            <%= check_box_tag 'chkTerms'  %>
            I accept the <%= link_to 'Terms & Conditions', '/pages/terms' %> <span class="required">*</span>
        </label>
      </div>

      <div class="button-options">

        <%= f.submit 'Submit', class: 'btn btn-danger' %>
        <%= link_to 'Cancel', '/pages/home', class: 'link-button-cancel' %>
      </div>
    </fieldset>
<% end %>

控制器

代码语言:javascript
复制
def create
    @person = Person.new(register_params)
    @person.status = 'pending_validation'

    if @person.save
       render('submit')
    else
       render('register')
    end

end

private
    def register_params
      params.require(:person).permit(:first_name, :last_name, :email_address, :display_name, :country_code)
    end

正如您所看到的,在我看来,我有一个"email_address_confirmation“text_field。我以创建所有其他字段的方式创建了它,它们都很好地工作,所以在我的生活中,我不知道代码到底出了什么问题。但是当我提交页面时,无论我在确认字段中放了什么,确认验证都不会触发。

如果有问题,我使用的是Rails 4.2.0和Ruby2.1.5p273。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 20:15:38

您需要在您的模型中添加以下内容:

代码语言:javascript
复制
validates :email_address_confirmation, presence: true

根据导轨

只有当email_confirmation不是nil时才执行此(确认)检查。

另外,在控制器的方法register_params中进行更改,允许参数中遗漏email_address_confirmation字段:

代码语言:javascript
复制
def register_params
  params.require(:person).permit(:first_name, :last_name, :email_address, :email_address_confirmation, :display_name, :country_code)
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32725951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档