web-dev-qa-db-ja.com

バリデーター、パスワード確認

モデルがパスワードの確認をチェックしない理由がわかりません。これはモデルのコードです。

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

パスワードが一致しなくてもエラーは発生しません。

18
Joe

私もこれでやけどを負った。確認値はnilだと思います。ドキュメントから:

注:このチェックは、password_confirmationがnilでない場合にのみ実行され、デフォルトでは保存時にのみ実行されます。確認を要求するには、確認属性の存在チェックを必ず追加してください。

また、検証によって追加されるため、_attr_accessor :password_confirmation_は必要ありません。 Rails!

36
SooDesuNe

一括割り当てを使用している場合は、attr_accessibleにパスワードを追加する必要があります。 attr_accessorは仮想属性を作成しますが、一括割り当てには使用できません。理想的には、password_confirmationattr_accessibleに追加しないでください。validates_confirmation_ofpasswordの値を検証する必要があります。およびpassword_confirmationですが、password_confirmationの値はゼロになります。 attr_accessibleにpassword_confirmationを追加しましたが、正しく機能します

Rails 3。

1
Kaushal Kishore