0

我对 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>

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

谢谢您的帮助!

4

2 回答 2

2

我有两个选择:

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 %>
于 2012-08-04T01:46:17.680 回答
2

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

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

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

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

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

于 2012-08-04T02:40:47.773 回答