为了尽可能保持我的应用程序视图为DRY,我遇到了一些问题。我的appliation.html.erb合并了一个静态的侧边栏菜单。我的每个主控制器都包含一个辅助侧栏菜单(本质上是一个子菜单)。我可以将呈现菜单的代码从application.html.erb中提取出来,并将其放入每个视图中,并在那里更改次要边栏,但这在我的视图中会产生很多重复。侧栏的DRY视图
我看到这个SO post,看着this page,但我无法得到任何想法工作。我在想,我可以把这样的:
<% provide(:submenu, 'layouts/sidebars/sidebar_customers_contacts') %>
在每个视图顶部,并使用从application.html.erb但当然做
<% content_for(:submenu) do %>
<%= render :partial => :submenu %>
<% end %>
渲染相关的部分那没用。
这是我目前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>
我觉得我做这个难度比它确实是。有没有简单的方法来做到这一点?
Thanks @Lenny Bose。这是完美的,如果我能得到它的工作。我尝试了controller_name,controller.controller_name,'@ controller.controller_name',并且我得到'部分名称(layouts/sidebars /#{controller_name})不是每个人的有效Ruby标识符。我的语法不正确?我正在使用答案中显示的语法,甚至是它的一些变体。任何想法我做错了什么? – mack
错误点在正确的方向。 Rails没有将控制器名称插入其值,而只是使用变量名称。我上面的编辑应该工作。 –
太棒了!这是关于我没有尝试过的唯一变体,当然它是唯一可行的变体。 : ) 感谢您的帮助。 – mack