tengo un hash de rubí que tiene este aspectoCuál es la mejor manera de convertir un hash de rubí a un array
{ "stuff_attributes" => {
"1" => {"foo" => "bar", "baz" => "quux"},
"2" => {"foo" => "bar", "baz" => "quux"}
}
}
y quiero convertirlo en un hash que tiene este aspecto
{ "stuff_attributes" => [
{ "foo" => "bar", "baz" => "quux"},
{ "foo" => "bar", "baz" => "quux"}
]
}
También necesito preservar el orden numérico de las teclas, y hay un número variable de teclas. Lo anterior es súper simplificado, pero he incluido un ejemplo real en la parte inferior. ¿Cuál es la mejor manera de hacer esto?
PS
También tiene que ser recursivo
En cuanto a la recursividad va, esto es lo que podemos asumir:
1) la tecla que debe ser manipulado coincidirá/_attributes $/ 2) el hash tendrá muchas otras claves que no coinciden/_attributes $/ 3) las claves dentro del hash siempre serán un número 4) un _attributes hash puede estar en cualquier nivel del hash debajo de cualquier otra tecla
este hash es en realidad el hash de parámetros de una acción de creación en el controlador. Este es un ejemplo real de lo que será necesario analizar con esta rutina.
{
"commit"=>"Save",
"tdsheet"=>{
"team_id"=>"43",
"title"=>"",
"performing_org_id"=>"10",
"tdsinitneed_attributes"=>{
"0"=>{
"title"=>"",
"need_date"=>"",
"description"=>"",
"expected_providing_organization_id"=>"41"
},
"1"=>{
"title"=>"",
"need_date"=>"",
"description"=>"",
"expected_providing_organization_id"=>"41"
}
},
"level_two_studycollection_id"=>"27",
"plan_attributes"=>{
"0"=>{
"start_date"=>"", "end_date"=>""
}
},
"dataitem_attributes"=>{
"0"=>{
"title"=>"",
"description"=>"",
"plan_attributes"=>{
"0"=>{
"start_date"=>"",
"end_date"=>""
}
}
},
"1"=>{
"title"=>"",
"description"=>"",
"plan_attributes"=>{
"0"=>{
"start_date"=>"",
"end_date"=>""
}
}
}
}
},
"action"=>"create",
"studycollection_level"=>"",
"controller"=>"tdsheets"
}
NameError: variable local indefinida o método 'clave 'para # \t de/storage/cait/development/app/helpers/application_helper .rb: 6: en 'array_from_hash ' –
después de corregir ese error cambiando la clave k.to_i.to_s == por k.to_i.to_s == k, ¡funciona correctamente! ¡Gracias! –
Tienes algunas ideas interesantes para sangrar aquí :) – rfunduk