Tôi có một băm ruby trông như thế nàycách tốt nhất để chuyển đổi một băm ruby để một mảng
{ "stuff_attributes" => {
"1" => {"foo" => "bar", "baz" => "quux"},
"2" => {"foo" => "bar", "baz" => "quux"}
}
}
là những gì và tôi muốn biến nó thành một hash trông như thế này
{ "stuff_attributes" => [
{ "foo" => "bar", "baz" => "quux"},
{ "foo" => "bar", "baz" => "quux"}
]
}
Tôi cũng cần giữ lại thứ tự số của các phím và có một số lượng khóa thay đổi. Ở trên là siêu đơn giản, nhưng tôi đã bao gồm một ví dụ thực tế ở phía dưới. Cách tốt nhất để làm điều này là gì?
PS
Nó cũng cần phải được đệ quy
Theo như các đệ quy đi, đây là những gì chúng ta có thể giả định:
1) chìa khóa mà cần phải được thao tác sẽ phù hợp/_attributes $/ 2) băm sẽ có nhiều khóa khác không khớp/_attributes $/ 3) các khóa bên trong băm sẽ luôn là số 4) băm _attributes có thể ở bất kỳ mức băm nào dưới bất kỳ khóa nào khác
băm này thực sự là băm params từ một hành động tạo trong bộ điều khiển. Đây là một ví dụ thực sự về những gì sẽ cần phải được phân tích cú pháp với thói quen này.
{
"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: biến không xác định cục bộ hoặc phương thức 'khóa 'cho # \t từ/storage/cait/development/app/helpers/application_helper .rb: 6: trong 'mảng_from_hash ' –
sau khi sửa lỗi đó bằng cách thay đổi khóa k.to_i.to_s == thành k.to_i.to_s == k, nó hoạt động đúng đắn! cảm ơn! –
Bạn đã có một số ý tưởng thú vị wrt indenting ở đây :) – rfunduk