2015-02-03 5 views
0

У меня плохая интерпретация моего кода, или я не понимаю, как пусть это сработает.Неверная интерпретация моего кода Ruby моего кода

В принципе у меня есть этот запрос:

def create_request 
 
    return {} unless [email protected]? 
 

 
    req = { 
 
    ProfileIDVersion: { 
 
     ID: ENV['GBGROUP_PROFILE_ID'], 
 
     Version: ENV['GBGROUP_PROFILE_VERSION'] 
 
    }, 
 
    CustomerReference: reference, 
 
    InputData: { 
 
     Personal: { 
 
     PersonalDetails: { 
 
      Title: @person.title, 
 
      Forename: @person.first_name, 
 
      MiddleName: @person.middle_name, 
 
      Surname: @person.last_name, 
 
      Gender: @person.gender, 
 
      DOBDay: @person.dob.nil? ? '' : @person.dob.day, 
 
      DOBMonth: @person.dob.nil? ? '' : @person.dob.month, 
 
      DOBYear: @person.dob.nil? ? '' : @person.dob.year 
 
     } 
 
     }, 
 
     Addresses: [] 
 
    } 
 
    } 
 
    address_count = 0 
 
    @person.addresses.each do |address| 
 
    Rails.logger.debug 'Adding address' 
 
    if address_count == 0 
 
     Rails.logger.debug 'Adding current address' 
 
     req[:InputData][:Addresses] << { 
 
     CurrentAddress: { 
 
      Country: address.country, 
 
      ZipPostcode: address.postcode, 
 
      AddressLine1: address.line1, 
 
      AddressLine2: address.line2, 
 
      AddressLine3: address.town_city, 
 
      FirstYearOfResidence: address.from_year, 
 
      LastYearOfResidence: address.to_year 
 
     } 
 
     } 
 
    else 
 
     Rails.logger.debug 'Adding previous address' 
 
     req[:InputData][:Addresses] << { 
 
     "PreviousAddress#{address_count}" => { 
 
      Country: address.country, 
 
      ZipPostcode: address.postcode, 
 
      AddressLine1: address.line1, 
 
      AddressLine2: address.line2, 
 
      AddressLine3: address.town_city, 
 
      FirstYearOfResidence: address.from_year, 
 
      LastYearOfResidence: address.to_year 
 
     } 
 
     } 
 
    end 
 
    address_count += 1 
 
    end 
 
end

, где я ожидал, чтобы иметь на выходе:

<ns:Addresses> 
 
<ns:CurrentAddress> 
 
<ns:Country>United Kingdom</ns:Country> 
 
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode> 
 
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1> 
 
<ns:AddressLine2>St Georges Road</ns:AddressLine2> 
 
<ns:AddressLine3>Tidworth</ns:AddressLine3> 
 
<ns:FirstYearOfResidence>2015</ns:FirstYearOfResidence> 
 
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence> 
 
</ns:CurrentAddress> 
 
<ns:PreviousAddress1> 
 
<ns:Country>United Kingdom</ns:Country> 
 
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode> 
 
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1> 
 
<ns:AddressLine2>St Georges Road</ns:AddressLine2> 
 
<ns:AddressLine3>Tidworth</ns:AddressLine3> 
 
<ns:FirstYearOfResidence>2012</ns:FirstYearOfResidence> 
 
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence> 
 
</ns:PreviousAddress1> 
 
</ns:Addresses>

вместо я получил, что:

<ns:Addresses> 
 
<ns:CurrentAddress> 
 
<ns:Country>United Kingdom</ns:Country> 
 
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode> 
 
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1> 
 
<ns:AddressLine2>St Georges Road</ns:AddressLine2> 
 
<ns:AddressLine3>Tidworth</ns:AddressLine3> 
 
<ns:FirstYearOfResidence>2015</ns:FirstYearOfResidence> 
 
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence> 
 
</ns:CurrentAddress> 
 
</ns:Addresses> 
 
<ns:Addresses> 
 
<ns:PreviousAddress1> 
 
<ns:Country>United Kingdom</ns:Country> 
 
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode> 
 
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1> 
 
<ns:AddressLine2>St Georges Road</ns:AddressLine2> 
 
<ns:AddressLine3>Tidworth</ns:AddressLine3> 
 
<ns:FirstYearOfResidence>2012</ns:FirstYearOfResidence> 
 
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence> 
 
</ns:PreviousAddress1> 
 
</ns:Addresses>

Как вы можете видеть, у меня есть два адреса блока, один с текущим адресом и другой с предыдущего адреса, но нужно только один адрес блок.

догадки, что проблема может быть вызов несколько раз:

req[:InputData][:Addresses] << 

, но я на самом деле не знаю, как ее решить, чтобы иметь все адреса в одном блоке.

Это то, что я получил от моего Spec теста:

"Addresses": [ 
 
     { 
 
     "CurrentAddress": { 
 
      "Country": "United Kingdom", 
 
      "ZipPostcode": "OX4 2QX", 
 
      "AddressLine1": "36 Brasenose Driftway", 
 
      "AddressLine2": "Oxford", 
 
      "AddressLine3": null, 
 
      "FirstYearOfResidence": 2002, 
 
      "LastYearOfResidence": 2014 
 
     } 
 
     }, 
 
     { 
 
     "PreviousAddress1": { 
 
      "Country": "United Kingdom", 
 
      "ZipPostcode": "AB1 1AA", 
 
      "AddressLine1": "21 A Street", 
 
      "AddressLine2": "Aberdeen", 
 
      "AddressLine3": null, 
 
      "FirstYearOfResidence": 1998, 
 
      "LastYearOfResidence": 2002 
 
     } 
 
     } 
 
    ]

Благодаря любому проведет минуту ответить, Caterpillar.

+0

, как вы добавили пробегу фрагмент кода, –

+1

я просто нажал} символ { в то время как я писал вопрос! –

ответ

0

Немного савона, которое делает преобразование между хэш-символом ruby ​​и xml, представляет собой драгоценный камень, называемый gyoku. Для gyoku значение массива приводит к нескольким элементам (чье имя задается ключом). Если вы не хотите этого, то значение ключа адреса должно быть хэш т.е. вашего вклада должен выглядеть

{"Addresses" => { 
    "CurrentAddress" => { 
     "Country" => "United Kingdom", 
     ... 
    }, 
    "Previous" => { 
     "Country" => "United Kingdom", 
     ... 
    } 
} 
+0

Спасибо Фредерик! ваш ответ был уместным и помогает мне найти способ создать это представление класса, но пока кажется сложным, чем ожидалось ... в основном у меня возникают трудности с созданием реплики JSON без фигурного скобки между ними ... вы находите Кстати, дайте мне знать! ;) –

Смежные вопросы