我是Rails的相对新手,但想知道如何使用content_tag创建循环导航菜单。这看起来似乎有用,但我已经看到必须在content_tag循环中使用concat。我觉得我已经尝试了所有可能的途径,然后用心情搜索。非常感谢任何帮助。
供参考:
感谢。
def right_nav(page)
content_tag(:ul, :class => 'nav') do
if !page.children.for_menu.empty?
sub_nav(page)
else
concat content_tag(:li, link_to(page.title, page.path, :class=> current_menu_item?(page) ? 'current' : nil))
end
end
end
def sub_nav(parent)
content_tag(:li, nav_link(parent)) do
content_tag(:ul) do
parent.children.for_menu.each do |subpage|
if !subpage.children.for_menu.empty?
sub_nav(subpage)
else
content_tag(:li, nav_link(subpage))
end
end
end
end
end
def nav_link(page)
link_to(page.title, page.path)
end
答案 0 :(得分:0)
而不是使用每个,也许尝试在循环中使用collect;这样结果就会传回到链条上。
答案 1 :(得分:0)
内部content_tag:ul没有从每个返回值获得正确的返回值,因为每个返回它被调用的集合。
ruby-1.9.2-p180 :001 > [1,2,3,4].each {|n| n + 1}
=> [1, 2, 3, 4]
对于像content_tag这样的东西你可以使用inject将所有li / sub_nav项连接在一起并正确地返回到content_tag
def sub_nav(parent)
content_tag(:li, nav_link(parent)) do
content_tag(:ul) do
parent.children.for_menu.inject('') do |result, subpage|
if !subpage.children.for_menu.empty?
result + sub_nav(subpage)
else
result + content_tag(:li, nav_link(subpage))
end
end
end
end
end