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

Rails Tutorial 第8章ログイン、ログアウト 8.1.4 フラッシュメッセージを表示する が NoMethodErrorになる の解決方法

Ruby on Rails

Rails4.2(第3版)を使用

Rails Tutorial 第8章 8.1.4 フラッシュメッセージを表示するのリスト8.6:ログイン失敗時の処理を扱う(誤りあり)は以下のようになっています。

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      # ユーザーログイン後にユーザー情報のページにリダイレクトする
    else
      flash[:danger] = 'Invalid email/password combination' # 本当は正しくない
      render 'new'
    end
  end

  def destroy
  end
end

こんな感じの画面になるよ、と書いてありますが。。。

f:id:eclipse0041taka:20170106180308p:plain

ならない。

エラーのメッセージは、

「NoMethodError in SessionsController#create」と出ます。

色々調べた結果2つの[:session]を[:sessions]にすると解決できました。

これがなぜそうなるのかはまだ理解できていませんが。。。