このStack Overflow questionでは、質問の最後でこの問題に対処し始めていますが、それは主な質問ではなく、既に回答されています。
と の両方に含まれるモジュールがありApplicationController
ますMyEngineController
。モジュールのインスタンス メソッドの一部が、login_url
または他の名前付きルートを使用しているとします。ApplicationController からは機能しますが、からは機能しませんMyEngineController
。それを に置き換えるとmain_app.login_url
、両方で機能しますが、それは非常に冗長に思えます。とにかく、コードが既に gem 依存関係の一部である場合はどうなるでしょうか? コーディングしているエンジンから事後的に動作させるにはどうすればよいですか?
名前付きヘルパーを使用しようとすると、次のようになります。
ActionController::RoutingError:
No route matches {:action=>"new", :controller=>"sessions"}
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error'
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:528:in `rescue in generate'
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:520:in `generate'
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:561:in `generate'
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:586:in `url_for'
actionpack-3.2.8/lib/action_dispatch/routing/url_for.rb:148:in `url_for'
actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:213:in `login_url'
:controller=>"sessions"
必要があることに注意してください:controller=>"/sessions"
(ルート名前空間に配置するためのスラッシュを使用)が、それは私が知る限り、名前付きルートに渡すことができるオプションではありません。このコードを追加してみました:
extend ActiveSupport::Concern
included do
main_app.install_helpers(self)
end
MyEngineController で、しかしそれは助けにはなりませんでした。(install_helpers
文書化が非常に不十分です。誰が何をすべきか説明できますか?)