我一直试图找到一种方法来显示应用程序从数据库生成的侧边菜单。由于菜单需要是用户可编辑的,我认为最好的做法是将其创建为脚手架,只需添加一个“显示菜单”动作即可以树状方式呈现菜单,而剩下的脚手架将允许管理员用户修改菜单项。
现在,我遇到了一个小问题 - 我无法找到一种方法来“调用”来自application.html.erb的show菜单操作(我将其用作所有操作和控制器的包装器) 。它有一个主'body',它有一个'yield'行,显然会让任何一个控制器被引用来渲染它的输出。在此之前,我希望在该HTML的不同部分显示动态菜单。
这可能吗,怎么会这样做呢?
因为无论显示哪个特定的动作(视图),都应该看到相同的菜单,我想避免在我的应用程序的每个控制器的每个视图中放置相同的“菜单渲染”逻辑。
答案 0 :(得分:6)
从你的术语来看,我并不完全确定这是你所需要的,但现在就是这样。如果您想为不同类型的信息保留布局的不同部分,您可以这样做
<!-- In application.html.erb -->
<%= yield :menu %>
<!-- Main content goes here -->
<%= yield %>
然后,在要渲染的视图中,如果要显示菜单,可以执行以下操作。
<%= content_for :menu do %>
<!-- Show menu -->
<% end %>
通过这种方式,您可以在视图中显示一个菜单,您希望在其中显示菜单,而不是在其他菜单中显示菜单。
--- --- UPDATE 对于带有从db检索的菜单选项的动态菜单,请执行此操作
在ApplicationController中添加before_filter
before_filter :fetch_menu
def fetch_menu
@menu = #db query goes here
end
在application.html.erb
中<div id="menu">
<%@menu.each do |menu|%>
<!-- Do something with menu -->
<% end %>
</div>