エンジン内のヘルパーが消費側(親)アプリケーションにアクセスできないという問題に対処する記事をいくつか見つけました。私たち全員が同じページにいることを確認するために、これがあるとしましょう:
module MyEngine
module ImportantHelper
def some_important_helper
...do something important...
end
end
end
「Isolatedengine'shelpers」(L293)のレールエンジンのドキュメントを見ると、次のようになっています。
# 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
したがって、私のエンジンを消費している人に、これをapplication_controller.rbに追加するように依頼すると、その人は私の重要なヘルパーメソッドすべてにアクセスできるようになります。
class ApplicationController < ActionController::Base
helper MyEngine::ImportantHelper
end
これは私が望んでいることであり、機能しますが、特に私のユースケースのように、エンジンが公開するすべてのものを消費アプリのどこでも使用できる/使用する必要がある場合は、それは一種の苦痛です。そこで、もう少し掘り下げて、次のことを提案する解決策を見つけました。
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
config.to_prepare do
ApplicationController.helper(ImportantHelper)
end
end
end
これがまさに私が望んでいることです。すべてのImportantHelperメソッドを親アプリのアプリケーションヘルパーに追加します。ただし、機能しません。誰かが私がこのより良い解決策が機能しない理由を理解するのを手伝ってもらえますか?
私はレール3.1.3でruby1.8.7を実行しています。この問題に密接に関係する重要な情報を見逃した場合はお知らせください。事前に感謝します。