2010-11-17 23 views
1

我现在有几个布局,我的应用程序使用(该...是所有布局之间是相同的):我期待重新因子代码以减少重复困惑的高级Rails的布局嵌套

# 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> 
... 

,但是类变量(收益率以外)的奇怪位置使其变得困难。我是否应该使用变量来声明布局中的类值(并移至单个布局),还是应该添加包含重复...container.html.erb布局,然后再渲染其他三个布局(或者存在另一个选项I我错过了)?如果可能的话,我正在寻找“Rails”方法。谢谢!

回答

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呈现什么尚属首例。但是如果有一个可选的第一个参数会导致混淆,你也可以传入一个哈希值。

+0

这看起来不错!感谢您的回应! – 2010-11-17 23:24:06

0

我们使用像@sectionclass这样的实例变量完成了类似的事情。然后我们将其设置为ApplicationController中的默认值,并将其翻转为其他控制器中的页面特定值。那么你的页面会是这样的:

<div id="section" class="<%= @sectionclass %>"><div class="container-12"><%= yield %></div></div> 

实例变量的漂亮的部分是零的情况下用一个空字符串默默地失败。 (虽然有人可能会说这是'坏')。