Rails 3.1: Melhor maneira de expor o auxiliar de um mecanismo no aplicativo cliente
Encontrei alguns artigos que abordam a questão de auxiliares em um mecanismo que não estão acessíveis ao aplicativo consumidor (pai). Para garantir que estamos todos na mesma página, digamos que temos o seguinte:
module MyEngine
module ImportantHelper
def some_important_helper
...do something important...
end
end
end
Se você olhar para orails engine documentação nos "auxiliares do mecanismo isolado" (L293), diz:
# Sometimes you may want to isolate engine, but use helpers that are defined for it.
# If you want to share just a few specific helpers you can add them to application's
# helpers in ApplicationController:
#
# class ApplicationController < ActionController::Base
# helper MyEngine::SharedEngineHelper
# end
#
# If you want to include all of the engine's helpers, you can use #helpers method on an engine's
# instance:
#
# class ApplicationController < ActionController::Base
# helper MyEngine::Engine.helpers
# end
or isso, se eu pedir a alguém que consome meu mecanismo que adicione isso ao application_controller.rb, eles terão acesso a todos os meus métodos auxiliares importante
class ApplicationController < ActionController::Base
helper MyEngine::ImportantHelper
end
É isso que eu quero e funciona, mas isso é meio difícil, especialmente se, como é o meu caso de uso, tudo o que o mecanismo expõe pode / deve ser usado em qualquer lugar do aplicativo consumidor. Pesquisei um pouco mais e encontrei uma solução que sugeria que eu fiz o seguinte:
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
config.to_prepare do
ApplicationController.helper(ImportantHelper)
end
end
end
Agora éexatament o que eu quero: adicionar todo o meu método ImportantHelper ao auxiliar de aplicativo do aplicativo pai. No entanto, isso não funciona. Alguém pode me ajudar a descobrir por que essa solução melhor não funciona?
Estou executando o ruby 1.8.7 com trilhos 3.1.3. Deixe-me saber se eu perdi alguma informação importante relacionada ao problema e agradeço antecipadamente.