2015-08-30 3 views
0

Я бы хотел вызвать фильтр перед каждым действием каждого контроллера моего приложения rails.before_filter в ApplicationController not called (Rails 4)

Чтобы достичь этого, я просто использовал before_filter внутри моего ApplicationController.

Однако, это не сработает, и мой метод никогда не вызывается, когда я получаю действительный запрос.

Вот содержание моего ApplicationController:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    before_filter :authenticate_with_token 

    def authenticate_with_token 
     begin 
      auth = AuthenticatorService.new 
      auth.authenticate params[:email], params[:token], request.method, request.fullpath 
      @current_user = auth.user 
      return true 
     rescue Exception => e 
      return false 
     end 
    end 

end 

Даже если before_filter не должно быть устаревшим в рельсах 4, я также пытался использовать before_action, но результат остается тем же.

Любое решение?

+2

Убедитесь, что все остальные контроллеры наследуются от контроллера приложений: 'OtherController Danpe

+0

Это было ... Я наследовал от ActionController :: База вместо ApplicationController. Благодаря! –

+0

Вы можете использовать before_action вместо before_filter – Sanket

ответ

2

// редактирование: grml. я видел, что вы уже исправили свою проблему.

class ApplicationController < ActionController::Base 
    before_filter :throw_up 
    before_filter { 
    raise "hi friend" 
    end 
    private 
    def throw_up 
     raise "i need to puke" 
    end 
end 

class PagesController < ApplicationController 
    def index 
    end 
end 

Если я называю действие индекса - его работа отлично. Поднимается «Мне нужно блевать».

, пожалуйста, сделайте мне одолжение: если вы пишете методы, называемые фильтром, они должны быть частными.

+0

бонусные баллы за стиль. –