【问题标题】:Unable to override an existing partial using Deface无法使用 Deface 覆盖现有部分
【发布时间】:2013-12-31 01:51:50
【问题描述】:

在“spree_application.html.erb”文件中,我需要覆盖现有的部分 从以下链接获取完整代码:

https://github.com/spree/spree/blob/v2.1.2/frontend/app/views/spree/layouts/spree_application.html.erb

示例内容:

      <%= render :partial => 'spree/shared/header' %>

      <div id="wrapper" class="row" data-hook>

        <%= breadcrumbs(@taxon) %>

        <%= render :partial => 'spree/shared/sidebar' if content_for? :sidebar %>

        <div id="content" class="columns <%= !content_for?(:sidebar) ? "sixteen" : "twelve" %>" data-hook>
          <%= flash_messages %>
          <%= yield %>
        </div>

        <%= yield :templates %>

      </div>

这里我需要使用 Deface 替换以下部分:

  <%= render :partial => 'spree/shared/header' %>

我的 Deface 文件:header_modification.rb:

 Deface::Override.new(:virtual_path => 'spree/layouts/spree_application',
                      :name         => 'header_modification',
                      :replace      =>    ?
                      :partial      => 'spree/shared/spree_application'
                     )

应该在 :replace part 中写什么 / 任何其他操作都可用于使用 Deface 覆盖该部分?

【问题讨论】:

    标签: ruby-on-rails spree


    【解决方案1】:

    您可以使用以下命令测试您的 rake 选择器:

    rake deface:test_selector['spree/layouts/spree_application','erb[loud]:contains("spree/shared/header")']
    
    Querying 'spree/layouts/spree_application' for 'erb[loud]:contains("spree/shared/header")'
    ---------------- Match 1 ----------------
    <%= render :partial => 'spree/shared/header' %>
    

    所以这应该有效:

    Deface::Override.new(:virtual_path => 'spree/layouts/spree_application',
                         :name         => 'header_modification',
                         :replace      => 'erb[loud]:contains("spree/shared/header")',
                         :partial      => 'spree/shared/spree_application'
                        )
    

    【讨论】:

    • 这是一个很好的解决我的问题的方法。根据您的评论,我将使用 rake deface:test_selector 来检查覆盖部分。
    【解决方案2】:

    使用&lt;code erb-loud&gt; render :partial =&gt; 'spree/shared/header' &lt;/code&gt; 应该可以工作。顺便说一句,有一个有用的工具告诉你:http://deface.heroku.com/

    【讨论】:

    • 不幸的是,Heroku 上的 Deface 版本有点过时了。 erb 语法匹配在 Spree 2.1.x 使用的 Deface 1.x 中发生了变化。你最好使用 rake 任务来测试选择器rake deface:test_selector
    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2013-11-10
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多