2013-04-05 3 views
0

Я хочу, чтобы это сделать:Нужен ли мне для этого счетчик?

<div class="menu"> 

    <%- render_menu do |title,path,children| %> 

    <%= link_to title, path %> 

    <div class="submenu"> 
     <%= render_menu(children) do |title,path,children| %> 
     <%= link_to title, path %> 
     <%= children %> 
     <%- end %> 
    </div> 

    <% end %> 

</div> 

render_menu Метод будет выглядеть примерно так:

def render_menu(children=nil) 
    children = Paths.roots if children.nil? 
    children.collect do |child| 
    [ child.title, child.path, child.children ] 
    end 
end 

Я не уверен, что render_menu потребности вернуться, чтобы получить три Params .. render_menu захватит пункты меню по умолчанию, если аргументы не заданы.

+0

Как в сторону: код '<% = дети%>' будет оказывать результат 'children.to_s', что, вероятно, не то, что вы хотите. – toro2k

ответ

0

Вы должны использовать yield и заменить each на collect внутри render_menu:

def render_menu(children=nil) 
    children = Paths.roots if children.nil? 
    children.each do |child| 
    yield([child.title, child.path, child.children]) 
    end 
end 

Вы должны также изменить шаблон не показывать значение, возвращаемое render_menu:

<div class="submenu"> 
    <% render_menu(children) do |title,path,children| %> 
     <%= link_to title, path %> 
     <%= children %> 
    <% end %> 
</div> 
+0

Работает отлично! Благодаря! –

Смежные вопросы