application.html.erb根据用户所在的页面呈现不同的部分

时间:2015-06-13 14:12:14

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

我想根据用户所在网站的哪个页面显示不同的标题菜单。所以基本上在Rails'application.html.erb我想要的东西:

<% if "user is op page x" %>
  <%= render 'layouts/header1' %>
<% else %>
  <%= render 'layouts/header2' %>
<% end %>

但是<% if "user is op page x" %>行需要什么?也就是说,是否有一个指定页面的Rails方法?

2 个答案:

答案 0 :(得分:5)

这里要提到的事情。 1,您只需将布局中的内容作为application.html.erb的替代布局,这样您就可以为应用程序的一部分呈现完整的不同模板。例如,Admin UI将具有不同的布局。

对于某个应用程序的全局部分内容,我通常会在视图下创建partials文件夹:app/views/partials并将_header1.html.erb_header2.html.erb放在其中。

现在实际渲染它们,这就是控制器方法派上用场的地方。

在您的视图中,将if语句更新为:

<% if controller_name == "the_controller" && action_name == "the_action" %>
  <%= render partial: "partials/header1" %>
<% else %>
  <%= render partial: "partials/header2" %>
<% end %>

只需根据需要更改控制器名称和操作名称值即可。如果您需要更具包容性(标题2应该用于多个操作或控制器),那么我建议您查看content_for

答案 1 :(得分:0)

您还可以使用current_page?(route_path)

查看
<%= render partial: "partials/header#{current_page?(route_path) ? '1' : '2'}" %>" %>