2011-01-15 19 views
18

No puedo entender por qué el modelo doesen't comprobar la confirmación de la contraseña, este es el código del modelo:validadores, confirmación de la contraseña

class User < ActiveRecord::Base 
    attr_accessor :password_confirmation 
    validates :email, :presence =>true, 
        :uniqueness=>true 
    validates :password, :presence =>true, 
        :length => { :minimum => 5, :maximum => 40 }, 
        :confirmation =>true 
    validates_confirmation_of :password 
end 

El controlador está destinado toman los datos de la vista e intente realizar un guardado, este es el código de la vista:

<h1>Registration process</h1> 
<%= form_for(@new_user) do |f|%> 
<% if @new_user.errors.any? %> 
    <div id="errorExplanation"> 
    <h2><%= pluralize(@new_user.errors.count, "error") %> prohibited this article from being saved:</h2> 
    <ul> 
    <% @new_user.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
    <% end %> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %><br /> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %><br /> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %> 
    <%#TODO Confirm password%> 

    <%= f.submit 'Join' %> 
<%end%> 

No se producen errores si la contraseña no coincide.

+0

El código anterior funciona para mí. – Chamnap

+3

¿Necesita la doble confirmación de confirmación? Usted especifica ': confirmation => true' en la validación de la contraseña. – davemyron

+1

Sí ... el código funciona también para mí (como dijo Chamnap) y tener un doble validador de confirmación de contraseña no debería ser la razón para que no funcione. Simplemente le daría dos veces un mensaje "La contraseña no coincide con la confirmación " – Daniel

Respuesta

35

Acabo de quemarme por este también. Sospecho que su valor de confirmación es nil. A partir de los documentos:

NOTA: Esta comprobación se realiza sólo si password_confirmation no es nula, y por defecto sólo ahorrar en el. Requerir confirmación, asegúrese de agregar un cheque presencia de la confirmación atributo:

Además, no es necesario attr_accessor :password_confirmation, ya que la validación añade que para usted . Rails!

+0

Gracias - ¡esto también me estaba dando acidez estomacal! – Chip

+0

¿cómo puedo hacer que la confirmación NO sea nula? – Edward

1

Si está utilizando una asignación masiva que necesita agregar una contraseña al attr_accessible. attr_accessor creará un atributo virtual, pero la misma no estará disponible para la asignación de masas Idealmente no debemos estar agregando a la password_confirmationattr_accessible, validates_confirmation_of debe validar el valor de password y password_confirmation pero el valor de password_confirmation está llegando nula. He añadido a password_confirmation attr_accessible y funciona correctamente

Trabajar con Rails 3.

Cuestiones relacionadas