Validateurs, confirmation du mot de passe

Je ne comprends pas pourquoi le model ne vérifie pas la confirmation du mot de passe, c'est le code du model:

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

Le contrôleur est prévu de prendre les données de la vue et essayez d'effectuer une sauvegarde, c'est le code de la vue:

<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%>

aucune erreur n'apparaît si le mot de passe ne correspond pas.

18
demandé sur JJD 2011-01-15 04:29:44

2 réponses

nil. À partir de la documentation:

NOTE: cette vérification n'est effectuée que si password_confirmation n'est pas nul, et par défaut uniquement sur enregistrer. Exiger confirmation, assurez-vous d'ajouter un contrôle de présence pour la confirmation attribut:

en outre, vous n'avez pas besoin attr_accessor :password_confirmation, depuis la validation ajoute pour vous. Les Rails!

35
répondu SooDesuNe 2013-02-27 23:47:45

si vous utilisez une assignation de masse que vous devez ajouter mot de passe à attr_accessible. attr_accessor va créer un attribut virtuel mais le même ne sera pas disponible pour l'assignation de masse Idéalement on ne devrait pas être l'ajout d' password_confirmationattr_accessible,validates_confirmation_of valider la valeur de password et password_confirmation mais la valeur de password_confirmation vient nill. J'ai ajouté password_confirmation pour attr_accessible et il fonctionne correctement

travailler avec des Rails 3.

1
répondu Kaushal Kishore 2012-10-21 00:20:22