侧边栏

时间:2015-10-19 20:11:06

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

在我尽可能保持应用程序视图为DRY的过程中,我遇到了一些障碍。我的appliation.html.erb包含一个静态侧边栏菜单。我的每个主控制器都包含一个辅助侧边栏菜单(基本上是一个子菜单)。我可以使用从application.html.erb中提取菜单的代码并将其放在我的每个视图中并更改其中的辅助侧边栏,但这会在我的视图中产生很多重复。

我看到了SO post并查看了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>

我觉得我让它变得比实际更困难。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

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