我有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,除了一个。有一个更好的方法吗?
答案 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