モデルがパスワードの確認をチェックしない理由がわかりません。これはモデルのコードです。
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
コントローラは、ビューからデータを取得して保存を実行することを目的としています。これはビューのコードです。
<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%>
パスワードが一致しなくてもエラーは発生しません。
私もこれでやけどを負った。確認値はnil
だと思います。ドキュメントから:
注:このチェックは、password_confirmationがnilでない場合にのみ実行され、デフォルトでは保存時にのみ実行されます。確認を要求するには、確認属性の存在チェックを必ず追加してください。
また、検証によって追加されるため、_attr_accessor :password_confirmation
_は必要ありません。 Rails!
一括割り当てを使用している場合は、attr_accessible
にパスワードを追加する必要があります。 attr_accessor
は仮想属性を作成しますが、一括割り当てには使用できません。理想的には、password_confirmation
をattr_accessible
に追加しないでください。validates_confirmation_of
はpassword
の値を検証する必要があります。およびpassword_confirmation
ですが、password_confirmation
の値はゼロになります。 attr_accessibleにpassword_confirmation
を追加しましたが、正しく機能します
Rails 3。