在这个 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"
(使用斜线将其放在根名称空间中),但这不是我可以传递给命名路由 AFAIK 的选项。我尝试添加此代码:
extend ActiveSupport::Concern
included do
main_app.install_helpers(self)
end
在 MyEngineController 中,但它没有帮助。(install_helpers
记录得很差。谁能解释它应该做什么?)