代码之家  ›  专栏  ›  技术社区  ›  Sohan

充当\u树并指向\u json或从\u json

  •  0
  • Sohan  · 技术社区  · 14 年前

    您好:有没有人能找到一个解决方案来将acts\as\u树模型转换成包含所有节点的json?我使用:include=>创建trued:孩子们,但这仅仅是一个层次。你知道怎么迭代整棵树吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Kris    13 年前

    使用一个helper(或私有方法),它是递归的,并将嵌套模型转换为嵌套哈希,然后使用 to_json

    我需要在HTML/Erb视图中生成Json,但是如果您需要从控制器操作生成Json,或者使用Erb模板生成Json,那么同样的想法也应该适用。我还需要一个(硬编码的)根节点,如果不需要,可以跳过它。

    <script type="text/javascript">
      $(function(){
          var json = {
            id: "node00",
            name: "New Pathway",
            data: {},
            children: 
    <%= @categories.select { |c| c.root? && !c.leaf? }.collect { |c| category_to_spacetree_json(c) }.to_json.html_safe %>
          };
    
          init(json);
      });
    </script>
    

      def category_to_spacetree_json(category)
        hash = {
          :id => category.id,
          :name => category.name,
          :data => '',
          :children => []
        }
    
        unless category.leaf?
          hash[:children] = category.children.public.collect { |c| category_to_spacetree_json(c) }
        end
    
        hash        
      end
    
        2
  •  0
  •   Hardryv    14 年前

    您可以编写自己的方法来返回所有子体,但是这是您使用的树类型效率非常低的情况之一。

    如果您担心性能和数据库命中率,您应该查看其中一个嵌套集gem,或者 ancestry gem 这是更有效的方法来获取树枝。