错误:重定向太多

Alo*_*iel 2 ruby-on-rails

我正在使用devise并尝试下一个:

class ApplicationController < ActionController::Base
   protect_from_forgery
   before_filter :is_worker

   def is_worker
     if user_signed_in?
        @email = current_user.email
        if @email && Worker.find_by_email(@email).nil?
          redirect_to '/tasksadmins'
        else
           redirect_to '/workers'
        end
     else
         redirect_to '/users/sign_in'
     end
   end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试进入网站时:localhost:3000/tasksadmins我得到了:

Oops! It was not possible to show this website

The website at http://localhost:3000/tasksadmins seems to be unavailable. The precise error was:

Too many redirects

It could be temporarily switched off or moved to a new address. Don't forget to check that your internet connection is working correctly.
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?

Kor*_*tor 7

before_filter适用于每个请求.这就是为什么它一次又一次地重定向.

您可能只想过滤特定操作:

before_filter :is_worker, only: :index
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是检查是否需要重定向#is_worker:

redirect_to '/workers' unless request.fullpath == '/workers'
Run Code Online (Sandbox Code Playgroud)

编辑:

另一种方法是跳过重定向目标操作的前置过滤器.例:

class WorkersController < ApplicationController

  skip_before_filter :is_worker, only: :index

  # …

end
Run Code Online (Sandbox Code Playgroud)