2017-04-06 47 views
0

我有两种不同类型的codes。我需要组成这个格式的数组。分组代码

[ 
    { 
    code: '1A', 
    description: 'example' 
    }, 
    .. // next code 
] 

我就是这么做的,但我真的不喜欢这种方式,我该怎么干起来的代码?

def up 
    Account.all.each do |account| 
    arrayed_codes = [] 
    account.one_call_center.response_codes_repository_class::AllCodes.collect do |codes| 
     if response_code[:group_codes] 
     response_code[:group_codes].each do |group_codes| 
      arrayed_codes << { 
      code: group_codes[:code], 
      description: group_codes[:description] 
      } 
     end 
     else 
     arrayed_codes << { 
      code: response_code[:code], 
      description: response_code[:description] 
     } 
     end 
    end 
    arrayed_codes.each do |res_code| 
     ResponseCode.create!(account: account, 
          one_call_center_id: account.one_call_center.id, 
          close_code: res_code[:code], 
          description: res_code[:description], 
          ticket_types: account.one_call_center.ticket_types.keys) 
    end 
    end 
end 

回答

1
# obj is an each element of your AllCodes array 

codes = AllCodes.inject([]) do |codes_array, obj| 
    if obj.has_key?(:group_codes) 
    codes_array += obj[:group_codes] 
    else 
    codes_array << obj 
    end 
end 

codes_array是注入的阵列。遍历你的AllCodes,如果当前对象has_key?(:group_codes),我们应该采取obj[:group_codes](因为它已经是一个所需格式的数组),所以我们合并了我们的codes_array和它:codes_array += obj[:group_codes]。如果它没有那个密钥,那么它已经是所需格式的哈希了。所以我们只是将这个元素添加到数组中。