我试图通过
在我的html页面中添加一个布局render layout 'flatty'
这是加载整个flatty
布局的事情。在flatty.html.erb
中,它呈现_header
,_footer
和_sidebar.html.erb
我不想在此特定页面中加载_sidebar.html.erb
。
那我该怎么渲染呢?
答案 0 :(得分:3)
事情是这会加载整个平面布局。在flatty.html.erb中它呈现_header,_footer和_sidebar.html.erb我不想在这个特定的页面中加载_sidebar.html.erb
如果您有这么多更改,为什么要使用相同的布局? 为什么不制作一个可以在两种情况下渲染的部分内容。制作一个新的部分,让我们说_common.html.erb,在您的平面布局中呈现它并查看您想要使用它的动作。
#flatty.html.erb
<%= render "common" %>
<%= render "sidebar" %>
#some_action_name.html.erb
<%= render "common" %>
如果您仍希望在两种情况下都使用相同的布局,那么您可以在布局中使用rails 4 controller_name
和action_name
助手,并有选择地在布局中渲染侧边栏和其他部分:
#flatty.html.erb
<%= if controller_name == "some_controller_name" && action_name == "some_action_name"
<%= render "sidebar" %>
<% end %>
答案 1 :(得分:1)
也许在你的控制器动作中,你可以有一个标志,指示不应该渲染侧边栏。然后,在flatty.html.erb
文件中,在呈现_sidebar.html.erb
之前检查标志变量。
例如,如果您有一个名为flatty
的控制器操作,请添加一个实例变量@disable_sidebar
作为您的标志。
def flatty
@disable_sidebar = true
# Your other code
render layout: 'flatty'
end
然后,在flatty.html.erb
中,在render
之前为侧边栏添加条件(请注意!
声明中的if
否定:
<% if !@disable_sidebar %>
<%= render "layouts/sidebar" %>
<% end %>
或者,在您的flatty.html.erb
中,您还可以检查controller
哈希值中的action
和params
值,然后不要渲染侧边栏它匹配控制器的动作:
<% if params[:controller]!="YOUR_CONTROLLER" and !params[:action].eql? "flatty" %>
<%= render "layouts/sidebar" %>
<% end %>