Rails 検証機能 :confirmation について

2012年8月9日 Posted by PURGE

Rails3 にて、パスワード等の再入力のフォームがあるが、下記のように記述したが、どうしても :confirmation => true の入力検証が効かない。

login.html.erb

<%= text_field_tag :email, nil, {:placeholder => "メールアドレス"}%>
<%= password_field_tag :password, nil, {:placeholder => "パスワード"}%>
<%= password_field_tag :password_confirmation, nil, {:placeholder => "確認パスワード"}%>

member.rb

class Member < ActiveRecord::Base
  #
  # 検証機能
  #
  validates :email, 
            :presence => true, 
            :uniqueness => true
  validates :password, 
            :presence => true,
            :confirmation => true
end

結論から言うと、controllerクラス内の記述がまずかったようだ。実際、上記のmodelクラスとViewの記述には間違いがない。

問題点は、@member.password_confirmation の部分を記述していなかったことだ。

検証機能は、saveメソッドが呼ばれた時に機能するらしい。
@memberオブジェクト内に、password_confirmationパラメータが設定されてない為に、うまく動作しなかったようだ。

register_controller.rb

  def register
    @member = Member.new
    @member.email = params[:email]
    @member.password = params[:password]
    # この部分の記述漏れ
    # ↓ ↓ ↓ ↓ ↓ 
    @member.password_confirmation = params[:password_confirmation] 
        
    if @member.save
      #ログイン情報セッション登録
      redirect_to index_path
    else
      reset_session
      redirect_to error_path
    end
  end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です