Kev*_*tre 9 ruby-on-rails rails-engines
我有一个Rails引擎,我想从容器应用程序共享一个布局.我想支持主应用程序布局中的所有URL帮助程序,以使集成变得微不足道.这是为了支持容器应用程序中包含帮助程序的布局:
= link_to "Signup", new_user_path
= link_to "Login", new_user_path
...
Run Code Online (Sandbox Code Playgroud)
这导致:
未定义的局部变量或方法`new_user_path'用于#<#:0x007f9bf9a4a168>
我可以通过将application.html(在容器应用程序中)更改为:
= link_to "Signup", main_app.new_user_path
= link_to "Login", main_app.new_user_path
Run Code Online (Sandbox Code Playgroud)
但目标是使其集成引擎不需要用户对现有功能进行更改application.html.
我相信我也可以通过删除isolate_namespace Example来修复错误lib/example/engine.rb,但这几乎打破了引擎中的所有内容.
任何方式允许容器应用程序帮助程序和显式命名我的引擎帮助程序,以避免冲突?(即使用example.root_path而不是root_path)?
您可以将引擎中的助手包含在主机应用程序中。
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
Run Code Online (Sandbox Code Playgroud)
这样你就可以在你的 Rails 主机中使用你的助手而不会出现问题。当然,这种方式没有真正的命名空间,因此,如果引擎的用户将新的帮助器方法命名为与您的帮助器方法相同,则会发生冲突。
这是否回答你的问题?
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |