2

私は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

site: に入ろうとすると、次の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.

どうすれば修正できますか?

4

2 に答える 2

7

before_filterすべてのリクエストに適用されます。そのため、何度もリダイレクトされます。

特定のアクションのみをフィルタリングしたい場合があります。

before_filter :is_worker, only: :index

別の解決策は、リダイレクトが必要かどうかを確認することです#is_worker

redirect_to '/workers' unless request.fullpath == '/workers'

編集:

別の方法は、リダイレクトのターゲット アクションの before フィルターをスキップすることです。例:

class WorkersController < ApplicationController

  skip_before_filter :is_worker, only: :index

  # …

end
于 2012-12-29T22:03:02.670 に答える