ruby-on-rails – 具有隔离命名空间的Rails引擎共享布局

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 具有隔离命名空间的Rails引擎共享布局前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Rails Engine,我想从容器应用程序共享一个布局.我想支持主应用程序布局中的所有URL帮助程序,以使集成变得微不足道.这是为了支持容器应用程序中包含帮助程序的布局:
= link_to "Signup",new_user_path
= link_to "Login",new_user_path
...

这导致:

undefined local variable or method `new_user_path’ for #<#:0x007f9bf9a4a168>

我可以通过将application.html(在容器应用程序中)更改为:

= link_to "Signup",main_app.new_user_path
= link_to "Login",main_app.new_user_path

但目标是使其集成引擎不需要用户对现有功能的application.html进行更改.

我相信我也可以通过从lib / example / engine.rb中删除isolate_namespace示例来修复错误,但这几乎打破了引擎中的所有内容.

任何方式允许容器应用程序帮助程序和显式命名我的引擎帮助程序,以避免冲突? (即使用example.root_path而不是root_path)?

解决方法

看看这个: https://github.com/rails/rails/blob/a690207700d92a1e24712c95114a2931d6197985/actionpack/lib/abstract_controller/helpers.rb#L108

您可以在主机应用中包含引擎中的助手.

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主机中使用助手.当然,这种方式没有真正的命名空间,因此,如果引擎的用户命名一个与辅助方法相同的新辅助方法,它将发生冲突.

这是否回答你的问题?

猜你在找的Ruby相关文章