Rails 検証機能 :confirmation について

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

login.html.erb
[ruby]
<%= text_field_tag :email, nil, {:placeholder => "メールアドレス"}%>
<%= password_field_tag :password, nil, {:placeholder => "パスワード"}%>
<%= password_field_tag :password_confirmation, nil, {:placeholder => "確認パスワード"}%>
[/ruby]

member.rb
[ruby]
class Member < ActiveRecord::Base
#
# 検証機能
#
validates :email,
:presence => true,
:uniqueness => true
validates :password,
:presence => true,
:confirmation => true
end
[/ruby]

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

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

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

register_controller.rb
[ruby]
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
[/ruby]

This entry was posted in Rails, Ruby, 技術情報. Bookmark the permalink.

コメントを残す

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