2011-01-15 43 views
18

Tôi không thể hiểu tại sao mô hình doesen't kiểm tra xác nhận mật khẩu, đây là mã của mô hình:Validators, xác nhận mật khẩu

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 

Bộ điều khiển được thiết kế lấy dữ liệu từ quan điểm và cố gắng thực hiện lưu, đây là mã của chế độ xem:

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

Không có lỗi nào xuất hiện nếu mật khẩu không khớp.

+0

Mã trên đây làm việc cho tôi. – Chamnap

+3

Bạn có cần xác thực xác nhận kép không? Bạn chỉ định ': confirmation => true' trong quá trình xác nhận của mật khẩu. – davemyron

+1

Vâng ... mã cũng hoạt động cho tôi (như Chamnap đã nói) và có một trình xác nhận mật khẩu kép không phải là lý do nó không hoạt động. Nó chỉ cung cấp cho bạn hai lần một thông báo "Mật khẩu không khớp xác nhận " – Daniel

Trả lời

35

Tôi cũng bị đốt cháy bởi cái này. Tôi nghi ngờ giá trị xác nhận của bạn là nil. Từ các tài liệu:

Chú ý: Việc kiểm tra này được thực hiện chỉ khi password_confirmation không phải là con số không, và theo mặc định chỉ trên lưu. Yêu cầu xác nhận, hãy chắc chắn để thêm một tấm séc hiện diện cho sự khẳng định thuộc tính:

Ngoài ra, bạn không cần attr_accessor :password_confirmation, kể từ khi xác nhận thêm nó cho bạn . Rails!

+0

Cảm ơn - điều này đã khiến tôi bị ợ nóng! – Chip

+0

làm thế nào tôi có thể xác nhận KHÔNG phải không? – Edward

1

Nếu bạn đang sử dụng chuyển nhượng hàng loạt hơn bạn cần thêm mật khẩu vào attr_accessible. attr_accessor sẽ tạo ra một thuộc tính ảo nhưng giống nhau sẽ không có sẵn cho phân khối Idealy chúng ta không nên có thêm password_confirmation đến attr_accessible, validates_confirmation_of nên xác nhận giá trị của passwordpassword_confirmation nhưng giá trị của password_confirmation đang đến nill. Tôi đã thêm password_confirmation để attr_accessible và hoạt động đúng cách

Làm việc với Rails 3.

Các vấn đề liên quan