2017-04-06 9 views
0

私はcodesという2つの異なるタイプがあります。コードの配列をグループ化する

AllCodes = [ 
    { 
    group_name: 'Marked', 
    group_codes: [ 
     { 
     code: '1A', 
     description: 'Marked.' 
     } 
    ], 
    .. //next group codes. 
    } 
] 

AllCodes = [ 
    { 
    code: '2', 
    description: 'Located. Facilities Marked.' 
    } 
    .. //next codes. 
] 

この形式の配列を作成する必要があります。

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

私はこのようにしましたが、私はこのアプローチが本当に好きではありません。どうすればコードを枯渇させることができますか?

答えて

1
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 
# 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_arraycodes_array += obj[:group_codes]にマージします。もしそのキーを持っていなければ、それはすでに必要なフォーマットのハッシュです。したがって、この要素を配列に追加するだけです。

関連する問題