2017-04-06 43 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]。如果它沒有那個密鑰,那麼它已經是所需格式的哈希了。所以我們只是將這個元素添加到數組中。