我目前有一些应用程序使用的布局(...
在所有布局之间是相同的):
# application.html.erb
...
<div id="section"><div class="wrapper"><%= yield %></div></div>
...
# wide.html.erb
...
<div id="section" class="wide"><div class="container-12"><%= yield %></div></div>
...
# thin.html.erb
...
<div id="section" class="thin"><div class="container-06"><%= yield %></div></div>
...
我希望重新考虑代码以减少重复,但是类变量的奇怪位置(在yield之外)会使其变得困难。我应该使用变量来声明布局中的类值(并移动到单个布局),还是应该添加包含重复container.html.erb
的{{1}}布局,然后从中呈现其他三个布局(还是存在我缺少的另一个第三种选择)?如果可能的话,我正在寻找“Rails”方式。谢谢!
答案 0 :(得分:3)
module ApplicationHelper
def section_helper(outer_class=nil,inner_class)
content_tag(:div, :class=> outer_class, :id => :section) do
content_tag(:div, :class=> inner_class) do
yield
end
end
end
end
并在布局中:
<%= section_helper("wrapper") { yield } %>
<%= section_helper("wide","container-12") { yield } %>
<%= section_helper("thin","container-06") { yield } %>
这适用于没有“外部”类的第一种情况,因为:class => nil
没有呈现任何内容。但是如果可选的第一个参数令人困惑,你也可以传入一个哈希值。
答案 1 :(得分:0)
我们使用像@sectionclass这样的实例变量做了类似的事情。然后我们将它设置为ApplicationController中的默认值,并将其翻转为在其他控制器中寻呼特定值。然后您的页面将是这样的:
<div id="section" class="<%= @sectionclass %>"><div class="container-12"><%= yield %></div></div>
实例变量的好处是nil case用空字符串静默失败。 (虽然有人可能会说这是'坏')。