2

我需要将 rails 集合转换为嵌套的 json。

收藏:

    [
       id: 2, name: "Dir 1", parent_id: nil, lft: 1, rgt: 6, depth: 0,
       id: 3, name: "Dir 2", parent_id: nil, lft: 7, rgt: 8, depth: 0,
       id: 9, name: "Dir 2.1", parent_id: 2, lft: 2, rgt: 3, depth: 1,  
       id: 10, name: "Dir 2.2", parent_id: 2, lft: 4, rgt: 5, depth: 1
       ...
    ]

输出json

    [
        { 标签:“目录 1”,孩子:[] },
        { 标签:“目录 2”,孩子:[
            标签:“Dir 2.1”,孩子:[],
            标签:“Dir 2.2”,孩子:[]
        ]}
        ...
    ]

4

2 回答 2

3

这是假设您的收藏与模型相关联并且您正在使用awesome_nested_set

class Model

  def self.collection_to_json(collection = roots)
    collection.inject([]) do |arr, model|
      arr << { label: model.name, children: collection_to_json(model.children) }
    end
  end

end

# usage: Model.collection_to_json

这里roots。_

上面的替代方法,因为awesome_nested_set似乎会产生查询model.children是:

class Model

  def self.parents_from_collection
    all.select { |k,v| k[:depth] == 0 }
  end

  def self.children_from_collection(parent)
    all.select { |k,v| k[:parent_id] == parent[:id] }
  end

  def self.collection_to_json(collection = false)
    collection ||= parents_from_collection

    collection.inject([]) do |arr, row|
      children = children_from_collection(row)

      arr << { label: row[:name], children: collection_to_json(children) }
    end
  end
end
于 2013-10-04T15:31:52.073 回答
0

尝试 to_json 方法

collection.to_json
于 2013-10-04T14:24:36.587 回答