2011-01-15 40 views
18

io non riesco a capire il motivo per cui il modello doesen't controllare per la conferma della password, questo è il codice del modello:validatori, conferma la password

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 

Il controller è destinato prendere i dati dal punto di vista e prova a eseguire un salvataggio, questo è il codice della 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%> 

Non vengono visualizzati errori se la password non corrisponde.

+0

Il codice sopra funziona per me. – Chamnap

+3

Hai bisogno della doppia conferma di conferma? Si specifica ': confirmation => true' nella convalida della password. – davemyron

+1

Sì ... il codice funziona anche per me (come ha detto Chamnap) e avere un doppio validatore password_confirmation non dovrebbe essere la ragione per cui non funziona., Ti darebbe solo due volte un messaggio "La password non corrisponde alla conferma " – Daniel

risposta

35

Sono appena stato bruciato da questo anche. Sospetto che il tuo valore di conferma sia nil. Dalla documentazione:

NOTA: Questo controllo viene eseguito solo se password_confirmation non è pari a zero, e per impostazione predefinita solo su Save. Per richiedere di conferma, assicurarsi di aggiungere un controllo presenza per la conferma attributo:

Inoltre, non occorre attr_accessor :password_confirmation, dal momento che la convalida aggiunge per voi . Rails!

+0

Grazie - questo mi dava anche un po 'di bruciore di stomaco! – Chip

+0

come posso rendere NOT la conferma? – Edward

1

Se si utilizza un'assegnazione di massa di quella necessaria per aggiungere la password a attr_accessible. attr_accessor creerà un attributo virtuale, ma lo stesso non sarà disponibile per l'assegnazione di massa Idealy non dovremmo aggiungendo password_confirmation al attr_accessible, validates_confirmation_of dovrebbe convalidare il valore di password e password_confirmation ma il valore di password_confirmation sta arrivando nill. Ho aggiunto password_confirmation per attr_accessible e funziona correttamente

Lavorare con Rails 3.

Problemi correlati