我是Ruby和Rails的新手,并试图使用Ancestry创建菜单
我的代码如下:
在application_helper.rb
中module ApplicationHelper
def get_menus
@men = Menu
return @men
end
end
在views / layouts / _header_menu.html.erb
中<% @menu = get_menus %>
<% @menu.roots.each do |menu| %>
<li <%= "class='current-menu-item'" if request.fullpath == menu.pagelink %> >
<a href="<%= menu.pagelink %>"><span><%= menu.name%></span></a>
<% unless menu.children.empty? %>
<ul>
<% menu.children.each do |menu_child| %>
<li <%= "class='current-menu-item'" if request.fullpath == menu_child.pagelink %> >
<a href="<%= menu_child.pagelink %>"><span><%= menu_child.name%></span></a>
<% end %>
</ul>
<% end %>
</li>
<% end %>
通过这种方式,我只获得root及其子菜单。
如何使用祖先获得第n个菜单?
由于
答案 0 :(得分:0)
你想为此做一个递归函数,但不要担心,它们很容易。
在我看来,菜单中有/是项目的集合,每个项目都是链接或其他菜单。
在应用程序助手中,使用“render_menu(menu)”之类的方法。它返回一个字符串。看看你不熟悉的任何方法的文档。
def render_menu(menu)
s = '<ul>'
menu.each do |item|
if item.responds_to?(:each)
s << render_menu(item)
else
s << "<li>#{item}</li>"
end
s
end
请注意,您也可以(并且应该)也这样干:
def get_menus # todo: delete?
Menu
end