【RailsによるアジャイルWebアプリケーション開発第4版】イテレーションI1 Rails4系 ログイン周りのバリデーションでハマった話

images

本に書いてある通りやっても何故かバリデーションが通らない。

何度やっても「Password Missing password」と怒られるばかり。
物は試しとGoogleで似たような人がいないか検索してみるが それらしいものは見当たらない。

試しにModelを全コピするが一向に改善しないため、どうやらtypoではないようだ。
( 元々3.2系の本だから ちょいちょい仕様が変わってたりするんだよなあ…今回もその周りのにおいがプンプンする )

それでもって POST時にユーザから渡って来たログを出してみて、その値を確認してみた。

Parameters: {"utf8"=>"V", "authenticity_token"=>"c4yT/Bt6ypoDW5rl119tndpOZgLLAE4pv824XPZXRdM=", "user"=>{"name"=>"aef", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create User"}
Unpermitted parameters: password, password_confirmation
==========================================
Unpermitted parameters: password, password_confirmation
{"name"=>"aef"}
=========================================


passwordpassword_confirm が入っていない。それでもって、その上に何やらおかしなエラーが。
Unpermitted parameters: password, password_confirmation

というわけで「Unpermitted parameters」で検索をかけた所、原因が判明。

Rails4系から Strong Parameters というのが導入されたらしい。
どうやら ホワイトリストみたいな感じで、「このパラメータ以外は受け付けないよ」というのを generate scaffold する際にコントローラに自動で記載してくれるらしい。
そこでusers_controllerを見てみると…。

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :password_digest)
end

あったあった。フロント側で仮想的にパラメータを立てる際はここも変えないとダメだったみたい。
というわけで以下のように変更。

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :password, :password_confirmation)
end

今度は無事に通った。

Written by Nisei Kimura ( 木村 仁星 )

- Sponsored Links -

<<

Top

>>