2

Rails コレクションをネストされた json に変換する必要があります。

コレクション:

    [
       ID: 2、名前: "Dir 1"、parent_id: nil、lft: 1、rgt: 6、深さ: 0、
       id: 3、name: "Dir 2"、parent_id: nil、lft: 7、rgt: 8、深さ: 0、
       id: 9、name: "Dir 2.1"、parent_id: 2、lft: 2、rgt: 3、深さ: 1、  
       id: 10、name: "Dir 2.2"、parent_id: 2、lft: 4、rgt: 5、深さ: 1
       ...
    ]

出力json

    [
        { ラベル: "ディレクトリ 1", 子:[] },
        { label: "Dir 2", children: [
            ラベル: "Dir 2.1"、子: []、
            ラベル: "Dir 2.2"、子: []
        ]}
        ...
    ]

4

2 に答える 2

3

これは、コレクションがモデルに関連付けられていて、awweed_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 に答える