0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails Tutorial【第6版】 の第10章で起きたエラーと対処

Last updated at Posted at 2021-04-01

Ruby on Rails Tutorial【第6版】 をテキスト通りにやっていて少しハマった箇所がありましたので共有します。

リスト10.33のテストが通りませんでした。原因は2つありました。

##原因1
リスト10.30でメソッドの定義の順番が逆だったことでリダイレクトが上手くできていませんでした。正しくは以下です。

sessions_helper.rb
module SessionsHelper

  #(中略)

  #アクセスしようとしたURLを覚えておく
  def store_location
    session[:forwarding_url] = request.original_url if request.get?
  end
    
  #記憶したURL(もしくはデフォルト値)にリダイレクト
  def redirect_back_or(default)
    redirect_to(session[:forwarding_url] || default)
    session.delete(:forwarding_url)
  end

end

##原因2
リスト10.32でuser変数と@user変数を混同して使っていました。リスト9.27の演習でassignsメソッドを使ってテストコードの改善をした人は次のように書いてください。

sessions_controller.rb
class SessionsController < ApplicationController
  def new
  end
  
  def create
    @user = User.find_by(email: params[:session][:email].downcase)
    if @user&.authenticate(params[:session][:password])
      log_in @user
      params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
      redirect_back_or @user
    else
      flash.now[:danger] = 'Invaid email/password combination' # 本当は正しくない
    render 'new'
    end
  end
  
  def destroy
    log_out  if logged_in?
    redirect_to root_url
  end
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?