我对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>
我应该如何组织我的布局来支持这个?覆盖会在哪里发生?
感谢您的帮助!
答案 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 %>