【问题标题】:Deface issue with virtual_path in engines引擎中 virtual_path 的污损问题
【发布时间】:2023-04-06 09:19:01
【问题描述】:

我正在开发一个带有多个可安装引擎的 rails 应用程序。我使用 deface gem 来覆盖视图的某些部分,但是在更新其中一些视图时遇到了一些问题。

我不知道这是我正在犯的问题还是错误,但是当您在 layout 文件中有部分内容时,deface 似乎有一些问题要触发(我也在使用可安装的发动机)

让我用一个例子来解释。我的应用程序在 application.html.erb 文件中有以下代码。

<!-- some code -->
<div class = "container">
    <header class="masthead">
       <%= render "shared/navbar" %>
    </header>

<!-- some more code -->

在 navbar.html.erb 文件上我有:

<!-- some code -->
<li data-dat-hook='main_nav' class="nav-item">
    <%= link_to 'Home', dat.root_path, class: "nav-link" %> 
</li>
<!-- some more code -->

会触发污损的是data-dat-hook

在适当的文件中,在适当的地方定义:

Deface::Override.new(:virtual_path => "dat/shared/_navbar",
                 :name => "add_contacts_link_to_main_nav",
                 :insert_after => "[data-dat-hook='main_nav']",
                 :partial => "overrides/analyses_link",
                 :namespaced => true)

Deface 似乎甚至没有意识到这条虚拟路径的存在。我不知道为什么......如果我将代码从部分移动到布局文件(并更新虚拟路径),事情就会完美地工作。

【问题讨论】:

    标签: ruby-on-rails deface


    【解决方案1】:

    我找到了答案……

    这是因为命名空间的问题。

    我在引擎文件上定义了一个这样的快捷方式:

    paths["app/views"] << "app/views/dat"
    

    (顺便说一下,我的命名空间是“dat”)

    只是为了避免在调用视图时必须在任何地方添加此命名空间。嗯,看起来'deface'不明白这一点。

    所以,一旦我更新了我的应用程序文件上的渲染代码以包含命名空间路径,一切就开始工作了......

    <%= render "dat/shared/navbar" %>
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多