gpt4 book ai didi

ruby-on-rails - ruby 中的 2 级深度分组

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:13 26 4
gpt4 key购买 nike

所以我有一组记录,我想按 2 个级别分组

基本上我想group_by{|x| x.field1 } 然后散列中的每个值将按 field2 进一步分组。有效地通向一棵我可以倾倒的树。

def treemaker(array = [])
tree = ledgers.group_by{|x|x.master_group}
tree.each{|x,z| tree[x] = z.group_by{|y| y.account_group}}
tree
end

然后我会以一种可以放入“树”javascript 插件的方式呈现树。

有没有更高效的方法?

示例输入:ActiveRecord 对象数组,其中模型包含字段 master_group、account_group 和 name

Class MyModel < ActiveRecord::Base
validates :master_group, :account_group, :name, :presence => true
end

示例输出:

{"master_group1" => {"account_group1" => ["name1","name2",...], 
"account_groupx" => ["name3", "name4",...],
....},
"master_group2" => {"account_group2" => ["namex", "namey"]},
...
}

我并不是专门寻找“SQL 分组”解决方案(但这也很好)。只是在任何给定的 ruby​​ 对象列表上使用枚举的解决方案。

最佳答案

@xaxxon 让我基本上以正确的方式思考“哈希的默认值”路径。

我想我现在可以向我的模型添加一个方法,我可以在其中使用各种范围并在最后添加树以使我的模型处于树模式。

class MyModel < ActiveRecord::Base

validates :master_group, :account_group, :name, :presence => true
def self.tree(field1 = 'master_group', field2 = 'account_group')
tree = Hash.new{|hash,key| hash[key] = Hash.new{|h,k| h[k] = []}}
all.each do |item|
tree[item.send('field1')][item.send('field2')].push(item)
end
tree # bob's your uncle!
end

end

MyModel.recent.tree => Hash of Hash of arrays

关于ruby-on-rails - ruby 中的 2 级深度分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com