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