渲染布局而不在Rails中加载其内部布局

时间:2014-08-18 06:56:14

标签: ruby-on-rails ruby ruby-on-rails-4

我试图通过

在我的html页面中添加一个布局
render layout 'flatty'

这是加载整个flatty布局的事情。在flatty.html.erb中,它呈现_header_footer_sidebar.html.erb 我不想在此特定页面中加载_sidebar.html.erb。 那我该怎么渲染呢?

2 个答案:

答案 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_nameaction_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哈希值中的actionparams值,然后不要渲染侧边栏它匹配控制器的动作:

<% if params[:controller]!="YOUR_CONTROLLER" and !params[:action].eql? "flatty" %>
  <%= render "layouts/sidebar" %>
<% end %>