web-dev-qa-db-ja.com

before_filterから除外するコントローラーを指定します

認証にdeviseを使用していますが、アプリケーションコントローラーにbefore_filterがいくつかあります。私が見ている問題は、before_filterをログアウトしようとすると、それをインターセプトし、before_filterで設定したビューを保持しているということです。アプリケーションコントローラーまたは他のファイルから除外するコントローラーを指定する方法はありますか?

39
chaz hamilton

:onlyまたは:exceptでフィルターを修飾できます。

before_filter :filter_name, :except => [:action1, :action2]

または、(現在の状況で見られるように)フィルターがApplicationControllerで定義されており、サブクラスコントローラーでそれをバイパスしたい場合、同じ資格を持つskip_before_filterを使用できますサブクラスコントローラー:

skip_before_filter :filter_name, :except => [:action1, :action2]
78
Don Roby

継承されたコントローラーで指定されたbeforeフィルターをスキップするコントローラーでは、Railsにフィルターをスキップするように伝えることができます

class ApplicationController
  before_filter :authenticate_user!
end

class SessionsController < ApplicationController
  skip_before_filter :authenticate_user!
end
101
Jesse Wolgamott

Config/application.rbに

config.to_prepare do
  Devise::SessionsController.skip_before_filter :authenticate_user!
end

参照元:

DeviseのSessionsControllerのbefore_filterをスキップする方法?

13

上記の回答は以下を除いて適切です:DEPRECATION WARNING: skip_before_filter is deprecated and will be removed in Rails 5.1. Use skip_before_action instead.

したがって、before_actionの代わりにskip_before_action*-filterを使用してください。

2
akostadinov