Before_filter, если вы хотите "исключить" контроллер "abc",
В Rails, что является синтаксисом before_filter, когда вы хотите "исключить" контроллер "abc".
Пример, в application_controller, если я хочу сказать:
before_filter :login_required :except => ["-name of controller-"]
Фон - просто нужна базовая аутентификация для всего приложения, кроме контроллера, который фактически обрабатывает аутентификацию пользователя....
Ответы
Ответ 1
Вы можете поместить следующую строку в контроллер, где before_filter
не должен выполняться:
skip_before_filter :login_required
Вы даже можете указать методы, в которых before_filter
игнорируется с параметрами :only
и :except
:
skip_before_filter :login_required, :only => [:login]
Пример здесь.
Изменить: с Rails 4, before_filter
с псевдонимом before_action
, а skip_before_filter
также псевдоним с skip_before_action
Ответ 2
Синтаксис before_filter
-
before_filter :login_required, :except => ["-name of the action-"]
Посмотрите Rails API Doc.
Ответ 3
Вместо использования имени контроллера я бы рекомендовал воспользоваться тем фактом, что контроллеры наследуют свои фильтры от своего родителя. Поэтому я бы рекомендовал следующее:
# app/controllers/application_controller.rb
class ApplicationController
# no filters here
end
# app/controllers/authenticated_controller.rb
class AuthenticatedController < ApplicationController
before_filter :login_required
end
# app/controllers/some_other_controller.rb
class SomeOtherController < AuthenticatedController
# inherits the before_filter from AuthenticatedController
# use this for most of your other controllers
end
# app/controllers/unauthenticated_controller.rb
class UnauthenticatedController < ApplicationController
# no filters, since this inherits directly from ApplicationController
# use this for the controller that you don't want to check login on
end
Это означает, что контроллеры знают, должны ли они проверять логин, а не иметь (возможно, хрупкий) список имен.