Рендер древовоидного списка в Ruby

Есть хороший gem awesome_nested_set, с помощью которого можно создавать деревья сущностей в вашей БД. К сожалению, хелперов, чтобы отобразить на странице древовидный ul — li список в этом геме нет. Здесь я приведу пример хелпера, который отрендерит древо Nested set в виде правильного ul — li списка:

module ApplicationHelper
  #...
  def nested_tree(nodes, link)
    current_depth = 0
    counter = 0
    node_depth = 0
 
    result = "<ul>"
 
    nodes.each do |n|
 
      node_depth = n.depth
      node_id = n.id
      node_title = n.name
 
      if node_depth == current_depth
        result += "" if counter > 0
      elsif node_depth > current_depth
        result += "</ul><ul>"
        current_depth += (node_depth - current_depth)
      elsif node_depth < current_depth
        result += ("</li></ul>"*(current_depth - node_depth)) + ""
        current_depth -= (current_depth - node_depth)
      end       
 
      result += "<li "
 
      result += ' class="root"' if node_depth == 0
 
      path = link + "(n)"
 
      result += '><a href="' + eval(path) + '" title="' + h(node_title) + '">' + h(node_title) + '</a>'
 
      counter += 1
    end
 
    result += '</li>' * node_depth
    result += ''
  end
end
  • Артём Острецов

    Вы и на Symfony2 и на RoR пишете. Скажите, по вашему мнение, какая среда приятнее для разработчика? Спасибо.

  • admin

    Лично для меня Ruby on Rails гораздо приятнее. В нем есть «сахар» в виде встроенного CoffeeScript, SASS, удобного Бандлера + «сахарный» язык Ruby :) В Symfony 2 все это встраиваешь сам и много чего пишешь ручками. На Symfony 2 пишу, так как того требует работа :( С большим желанием бы отказался от Symfony (конкретнее от PHP).

  • isqad88

    Лично для меня Ruby on Rails гораздо приятнее. В нем есть «сахар» в виде встроенного CoffeeScript, SASS, удобного Бандлера + «сахарный» язык Ruby  В Symfony 2 все это встраиваешь сам и много чего пишешь ручками. На Symfony 2 пишу, так как того требует работа  С большим желанием бы отказался от Symfony (конкретнее от PHP).

  • isqad88

    Есть более крутой форк awesome_nested_set, это http://github.com/skyeagle/nested_set.git, где уже реализован хелпер для рендера такого древа.