2016-06-13 2 views
0

Я создал механизм Rails для регистрации некоторых действий в моем приложении. Все в порядке на уровне модели и представления, тесты проходят, и представления видны в главном приложении. Теперь для контроллеров ... Я просто не могу получить доступ к главному ApplicationController, чтобы вставить внутри него файл before_filter.Доступ к current_user в Rails engine application_controller

Мое приложение/контроллеры каталог внутри двигателя выглядит следующим образом:

/app 
    /controllers 
    /storyteller 
     /application_controller.rb 

Затем внутри application_controller.rb я добавил это:

module Storyteller 
    class ApplicationController < ::ApplicationController 

    before_action :save_current_user 

    def save_current_user 
     raise current_user.inspect # Doesn't raise 
    end 
    end 
end 

raise 'here' # No, doesn't raise anything too! 

... Это ничего не происходит, это даже похоже, что этот файл вообще не загружен. Я читал тонны учебников и документов, но никогда не работал.

Все, что я хочу сделать, это отслеживать current_user везде, на каждом действии/маршруте хост-приложения, что я пропустил?

ответ

0

контроллер должен наследовать ActionController::Base

например,

module Storyteller class ApplicationController < ActionController::Base # Put your code here end end

+0

Не повезло ... также не работает. – gbarillot

0

попробовать include блок объявить ваш before_action

например

module Storyteller 
    class ApplicationController < ActionController::Base 

    included do 
     before_action :save_current_user 
    end 

    def save_current_user 
     raise current_user.inspect # Doesn't raise 
    end 
    end 
end 
+0

@gbarillot, не могли бы вы попытаться использовать код выше. –

+0

Не работает. Даже если я сделаю большой рейз в начале файла, он ничего не повысит. Похоже, что этот файл даже не загружен вообще. Сожалею. – gbarillot

0

Наконец-то! Понял работает, изучая некоторые другие драгоценные камни на GitHub ... вот как я это сделал для контроллера:

# Engine /app/controllers/storyteller/application_controller.rb 
module Storyteller 
    module ApplicationController 
    extend ActiveSupport::Concern 

    included do 
     before_action :save_current_user 

     def save_current_user 
     UserRegistry.current_user ||= current_user 
     end 
    end 
    end 
end 

Я также должен был добавить это к установке двигателя:

# /lib/storyteller/engine.rb 
module Storyteller 
    class Engine < ::Rails::Engine 
    isolate_namespace Storyteller 

    initializer "get into controllers" do |app| 
     ActionController::Base.send :include, Storyteller::ApplicationController 
    end 
    end 
end 

Надежда это может помочь кто-то ...

 Смежные вопросы

  • Нет связанных вопросов^_^