読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【75日目】【1日20分のRailsチュートリアル】【第8章】ログイン失敗時のエラーメッセージを表示する

Ruby on Railsチュートリアル(第3版)

今日は「8.1.4 フラッシュメッセージを表示する」から。

8.1.4 フラッシュメッセージを表示する

ログインに失敗したときには代わりにフラッシュメッセージを表示することにします。最初のコードをリスト8.6に示します (このコードはわざと少し間違えてあります)。

ユーザー登録の場合はActive Recordのエラーメッセージがあったのでそれを使えば良かったけど、
ログインの場合はそんなのないので自前で用意します。

app/controllers/sessions_controller.rb

    :
    else
      flash[:danger] = 'Invalid email/password combination' # 本当は正しくない
      render 'new'
    end
    :

サーバー起動してエラーメッセージを確認。

$ rails server -b $IP -p $PORT

適当なユーザー情報を入力して「Log in」ボタンをクリック。

f:id:kt_zoe:20161118125036p:plain

Bootstrap CSSのおかげで見た目はいい感じです。

実は上のコードのままでは、リクエストのフラッシュメッセージが一度表示されると消えずに残ってしまいます。 (中略)
たとえば、わざと無効な情報を入力して送信してエラーメッセージを表示してから、Homeページをクリックして移動すると、そこでもフラッシュメッセージが表示されたままになっています (図8.6)。

f:id:kt_zoe:20161118125045p:plain

ほんとだ…!

ユーザー登録時に使ったリダイレクトはフラッシュメッセージは消えるけど、
renderメソッド使った再レンダリングは消えないのか。。。

このバグは8.1.5で修正するそう。

今日の作業時間は【20分】

次は「8.1.5 フラッシュのテスト」から。