如何切换导轨布局?

时间:2012-08-04 01:33:11

标签: ruby-on-rails

我对rails非常陌生,并坚持布局的概念。

我的应用正在使用Bootstrap网格。在我的application.html.erb中,我有以下内容:

<div class="row">
 <div class="span8">
    <%= yield %>
 </div>

 <div class="span4">
    <%= render 'layouts/right_col'%>
 </div>
</div>

这是一个具有右手窄列布局的基本主列。该应用程序的大部分将具有此布局。

但是在一些特定的视图操作上 - 我想要一个全宽列:

<div class="row">
<div class="span12">
   <%= yield %>
</div>
</div>

我应该如何组织我的布局来支持这个?覆盖会在哪里发生?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。最简单的方法是简单地创建另一个布局文件。例如,创建具有以下内容的app/views/layouts/wide.html.erb

<div class="row">
<div class="span12">
   <%= yield %>
</div>
</div>

代码。然后,您可以使用控制器方法选择性地使用该布局进行渲染,如下所示:

def show
  ...
  render :layout => :wide
end

Rails 3还有一个机制来设置模板层次结构。设置起来有点复杂,但可能导致代码更干。您可以在this railscast中了解有关它的更多信息。

答案 1 :(得分:1)

我有两个选择:

1)您创建两个不同的布局。如果唯一的区别是菜单,那么我不会这样做。

2)对于不应显示菜单的相关操作,在控制器中声明一个变量:

def some_action_with_no_side_menu

  @no_side_menu = 1
  #...
end

然后在布局中:

<% if defined? @no_side_menu %>
<div class="row">
  <div class="span12">
    <%= yield %>
  </div>
</div>
<% else %>
  <div class="row">
    <div class="span8">
     <%= yield %>
    </div>

    <div class="span4">
      <%= render 'layouts/right_col'%>
    </div>
  </div>
<% end %>