侧边栏的 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
在我尽可能保持我的应用程序视图干燥的过程中,我遇到了一些小问题。我的 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