繁体   English   中英

带Rails的动态菜单(在一个视图中引用两个Controller的输出)

[英]Dynamic menu with Rails (referencing outputs of two Controllers in one view)

我一直在试图找到一种方法来显示应用程序从数据库生成的侧面菜单。 由于菜单需要是用户可编辑的,所以我认为最好的做法是将其创建为支架,然后添加一个“显示菜单”操作,以树状方式呈现菜单,而其余的支架将允许管理员用户修改菜单项。

现在,我面临一个小问题-我想不出一种方法来从application.html.erb(我用作所有动作和控制器的包装器)“调用”显示菜单动作。 它有一个主“ body”,其中有一条“ yield”线,显然这将使引用哪个控制器呈现其输出。 在此之前,我希望在该html的不同部分中显示动态菜单。

那有可能吗,又该怎么做呢?

因为无论显示哪个特定的动作(视图),都应该看到相同的菜单,所以我想避免在应用程序的每个控制器的每个视图中都放置相同的“菜单渲染”逻辑。

从您的术语来看,我不能完全确定这是您所需要的,但是可以继续。 如果您想为不同类型的信息保留布局的不同部分,可以这样做

<!-- In application.html.erb -->
<%= yield :menu %>
<!-- Main content goes here -->
<%= yield %>

然后,如果要显示菜单,则可以在正在渲染的视图中执行以下操作。

<%= content_for :menu do %>
   <!-- Show menu -->
<% end %>

这样,您可以在要显示菜单的视图中显示菜单,而不要在其他视图中显示菜单。

---更新---对于具有从数据库中检索到的菜单选项的动态菜单,请执行此操作

在您的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM