Подтвердить что ты не робот

Before_filter, если вы хотите "исключить" контроллер "abc",

В Rails, что является синтаксисом before_filter, когда вы хотите "исключить" контроллер "abc".

Пример, в application_controller, если я хочу сказать:

before_filter :login_required :except => ["-name of controller-"]

Фон - просто нужна базовая аутентификация для всего приложения, кроме контроллера, который фактически обрабатывает аутентификацию пользователя....

4b9b3361

Ответ 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

Это означает, что контроллеры знают, должны ли они проверять логин, а не иметь (возможно, хрупкий) список имен.