9
10

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.

「localhostでリダイレクトが繰り返し行われました」の解決法 (ERR_TOO_MANY_REDIRECTS)

Posted at

#エラーの状況
簡易版twitterアプリを作成して、rails sで仮装サーバーを立ち上げ、localhost:3000にアクセルした時にでたエラーです。今まで遭遇したことがなかったエラーでしたので解決策について記述します。
スクリーンショット 2020-02-09 19.38.11.png

#エラー内容に対する仮説
エラー画面には「localhostでリダイレクトが繰り返し行われました」という記述があります。本来であればlocalhost:3000にアクセスすると、route.rbではtweetsコントローラーのindexアクションが実行されビューが表示されるはずです。

route.rb
Rails.application.routes.draw do
  root 'tweets#index'
  devise_for :users
  resources :tweets do
    resources :comments, only: :create
  end
  resources :users, only: :show
end

しかし今回の場合、本来はビューファイル(index.html.erb)を表示したいのに、読み込む段階でリダイレクトされてしまってるためのエラーとなっています。
ですのでコントローラーの表記によって起きているエラーと推測します。

#修正内容
では早速コントローラーの記述を確認します。
未ログインユーザーがindexにアクセスしようとするとmove_to_indexが実行され,indexアクションにリダイレクトされます。

tweets_controller.rb
class TweetsController < ApplicationController
  before_action :move_to_index

  def index
    @tweets = Tweet.includes(:user).order('created_at DESC').page(params[:page]).per(2)
  end
 
(省略)

  def move_to_index
    redirect_to action: :index unless user_signed_in?
  end
end

ここで問題となるのが、リダイレクト前にmove_to_indexが呼ばれるため無限ループが起きてしまします。この問題によって今回のエラーは発生していました。

#解決策
indexアクションにアクセスした時、indexアクションへのリダイレクトを繰り返すことにより無限ループが起こるので以下のように修正することでエラーを解決することができました。

###before

tweets_controller.rb
before_action :move_to_index

###after

tweets_controller.rb
before_action :move_to_index,except: :index
9
10
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
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?