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.
2 réponses
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!
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_confirmation
attr_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.