[英]How to restructure results from database
我有一個模型User,它有id,name,surname,role_id,permission_id
這里有一些用戶條目:
User => {:name => 'Bob', :surname => 'surnmae', :role_id => 1, :permission_id = 2}
User => {:name => 'Alice', :surname => 'strange', :role_id => 1, :permission_id = 3}
User => {:name => 'Ted', :surname => 'Teddy', :role_id => 2, :permission_id = 3}
現在我需要先通過role_id
然后通過permission_id
對它們進行分組,這就是我的意思:
Category.select([:name,:role_id,:permission_id])。group_by(&:role_id)
產品:
{1 =>
[#<User name: "Bob", role_id: 1, permission_id: 2>,
#<User name: "Alice", role_id: 1, permission_id: 3>]
2 => [#<User name: "Ted", role_id: 2, permission_id: 3>]
}
哪個足夠接近,但我需要將它們與permission_id分組,所以它看起來像這樣:
{:role_id => {:permision_id => [Array of users grouped by this criteria]}
}
也許是這樣的
Category.select([:name,:role_id,:permission_id])。group_by(&:role_id).map {| role | role.group_by(&:permission_id)}
它看起來有點棘手。 最好將其分為多個步驟。 但是,以下單行程將起作用:
Hash[ User.all.group_by(&:role_id).collect{|role, grp| [role, grp.group_by(&:permission_id)]} ]
輸出將是以下(這可能是您正在尋找的):
{1=>
{2=>[{:name=>"Bob", :surname=>"surnmae", :role_id=>1, :permission_id=>2}],
3=>[{:name=>"Alice", :surname=>"strange", :role_id=>1, :permission_id=>3}]},
2=>{3=>[{:name=>"Ted", :surname=>"Teddy", :role_id=>2, :permission_id=>3}]}}
相同的邏輯,但更容易理解:
output={}
User.all.group_by(&:role_id).each{|role, grp| output[role]= grp.group_by(&:permission_id)}
# output has required goruping
Category.select([:name, :role_id, :permission_id]).group_by { |category| [category.role_id, category.permission_id] }
編輯:沒關系,這並不能提供您正在尋找的格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.