侧边栏的 DRY 视图

DRY view for sidebar

在我尽可能保持我的应用程序视图干燥的过程中,我遇到了一些小问题。我的 appliation.html.erb 包含一个静态侧边栏菜单。我的每个主控制器都包含一个二级侧边栏菜单(本质上是一个子菜单)。我可以从 application.html.erb 中取出呈现菜单的代码,并将其放入我的每个视图中,并在那里更改辅助边栏,但这会在我的视图中产生很多重复。

我看到了这个 SO post and looked at this page,但我无法让任何一个想法发挥作用。我在想我可以放这样的东西:

<% provide(:submenu, 'layouts/sidebars/sidebar_customers_contacts') %>

在每个视图的顶部,并使用它通过执行

来呈现关联的部分
<% content_for(:submenu) do %>
   <%= render :partial => :submenu %>
<% end %>

来自 application.html.erb 但当然没有用。

这是我现在的 application.html.erb:

  <div class="side">
    <%= render 'layouts/sidebar' %>
    <%= render 'layouts/sidebars/sidebar_dashboard' %><!-- this needs to load a sidebar based on the controller that calls it. Each view of the controller will get the same sidebar.  -->
  </div>
  <div class="main-content">
    <%= yield %>
  </div>

我觉得我让这件事比实际情况更困难。有没有简单的方法可以做到这一点?

Rails 提供了一个名为 controller_name 的助手,您可以阅读有关 here.

的更多信息

假设您遵守自己的命名约定,这应该按原样工作。如果您决定某些控制器没有侧边栏,您可能需要加入一些条件...

application.html.erb

<div class="side">
  <%= render "layouts/sidebar" %>
  <%= render "layouts/sidebars/#{ controller_name }" %>
</div>
<div class="main-content">
  <%= yield %>
</div>

编辑 抱歉,我的错误是使用单引号而不是双引号。您不能在单引号内使用#{string interpolation}。 Source