我有Rails Engine我希望从容器应用程序共享布局。我想支持主应用程序布局中的所有URL帮助程序,以使集成变得微不足道。这是为了支持容器应用程序中包含帮助程序的布局:
= link_to "Signup", new_user_path
= link_to "Login", new_user_path
...
这导致:
未定义的局部变量或方法`new_user_path'对于#<#:0x007f9bf9a4a168>
我可以通过将application.html(在容器应用中)更改为:
来解决此问题= link_to "Signup", main_app.new_user_path
= link_to "Login", main_app.new_user_path
但目标是使其集成引擎并不要求用户对现有功能application.html
进行更改。
我相信我也可以通过从isolate_namespace Example
移除lib/example/engine.rb
来修复错误,但这几乎会打破引擎中的所有内容。
任何方式允许容器应用程序帮助程序并明确命名我的引擎助手以避免冲突? (即使用example.root_path
代替root_path
)?
答案 0 :(得分:0)
您可以在主机应用中添加引擎中的帮助程序。
module Blargh
class Engine < ::Rails::Engine
isolate_namespace Blargh
config.to_prepare do
# application helper
ApplicationController.helper(Blargh::ApplicationHelper)
# any other helper
end
end
end
这样您就可以毫无问题地在rails主机中使用您的助手。当然,这种方式没有真正的命名空间,因此如果引擎的用户命名一个与辅助方法相同的新辅助方法,它将发生冲突。
这会回答你的问题吗?