1

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

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

让我用一个例子来解释。我的应用程序在 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 似乎甚至没有意识到这条虚拟路径的存在。我不知道为什么......如果我将代码从部分移动到布局文件(并更新虚拟路径),事情就会完美地工作。

4

1 回答 1

2

我找到了答案...

由于命名空间,这是一个问题。

我在引擎文件上定义了一个快捷方式,如下所示:

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

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

只是为了避免在调用视图时必须在任何地方添加这个命名空间。好吧,“污点”似乎不明白这一点。

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

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

就是这样。

于 2018-01-26T14:01:59.407 回答