Application.html.erb模板继承

时间:2014-05-10 19:35:34

标签: ruby-on-rails ruby

我有rails(版本4.04,ruby版本2.1)的情况,我一直在使用标准的application.html.erb来定义我的网站,页眉,页脚,导航栏等的主框架。当我得到了一个内部div,称之为内部内容,那就是我把&lt;%yield%&gt;声明,以便子模板可以接管并将其内容放在正确的位置(例如,产品#show或products #index分别具有show.html.erb和index.html.erb,这些只是这些操作的内容)。< / p>

问题是我意识到我在那些子模板中复制了一些代码。在其中一个(除了一个)我总是这样开始:

<div class="columns large-6 medium-6 center-small">
  <div class="inner_wrapper">

我总是这样结束:

</div>
</div>

所以我在想,我不应该重复所有这些代码。我应该将它移到application.html.erb中,以便每个模板自动正确设置内部内容。

问题在于我正在谈论的一个动作。有一个操作具有不同的设置。我不想为每个子布局输入额外的2个div,除了一个。有一个更好的方法吗?

2 个答案:

答案 0 :(得分:0)

一种方法是在application.html.erb

中检查您当前使用的控制器
<% if params[:controller] == "controller name" %>
    <div>
        <%= yield %>
    </div>
<% else %>
    <div class="different div"> 
        <%= yield %>
    </div>
<% end %>

不确定这是否是最好的方式,但它是一种方法。

答案 1 :(得分:0)

创建一个不同的布局文件,并将其命名为products_layout.html.erb。

然后在控制器中

class ProductsController < ApplicationController
    layout: 'products_layout'
    ....
end

或者按行动

进行
def show
  render 'show', layout: 'products_layout'
end

http://guides.rubyonrails.org/layouts_and_rendering.html