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]