2016-07-27 4 views
0

У меня есть различные условия тестирования и основаны на конкретных входах. Я хочу создать то, что является запросом тела api, который я могу использовать. Есть одна часть запроса, который я хотел бы построить, и на основе этого ввода возвратит мне определенное количество дополнительных блоков.Ruby динамически создает массив

Метод ниже имеет два «блока» в настоящее время зашиты в:

def info(*value, *type) 

#request build logic here 

    return { 
     'individual' => { 
      'title' => 'Mr', 
      'firstName' => 'Joe', 
      'middleName' => '', 
      'lastName' => 'Bloggs', 
      'birthDate' => '2016-01-01', 
      'incomeAmount' => 50, 
      'emailAddress' => '[email protected]', 

     }, 
     'blocks' => [ 
      { 
       'value' => 400, 
       'type' => 'car' 
      }, 
      { 
       'value' => 400, 
       'type' => 'jug' 
      } 
     ] 
    } 
end 

Так на основе входов, я хотел бы создать свой, например, значение «блоки» = 100, тип = дом, так как блок будет просто это значение в формате выше.

С идеей, если я передал ей 10 значений/10 типов, я возвращаю все 10. Я попытался вызвать другой метод, который построил мой ответ, но я изо всех сил пытаюсь его повторить на основе ввода

def block(value,type) 
    "{ 
     'value' => #{value.to_i}, 
     'type' => #{type} 
    }," 
end 
+3

Показывайте неудачные попытки. –

ответ

0

Предполагая, что вы передаете в паре массивов значений и типов, вы можете использовать метод zip для выравнивания их:

def info(values, types) 
    blocks = values.zip(types).map do |value, type| 
    { 
     'value' => value.to_i, 
     'type' => type 
    } 
    end 

    { 
    'individual' => { 
     'title' => 'Mr', 
     'firstName' => 'Joe', 
     'middleName' => '', 
     'lastName' => 'Bloggs', 
     'birthDate' => '2016-01-01', 
     'incomeAmount' => 50, 
     'emailAddress' => '[email protected]' 

    }, 
    'blocks' => blocks 
    } 
end 
+0

Работает как удовольствие. Спасибо –

0

Вы возвращаете хэш, чтобы вставить в большой хэш, поэтому нет никаких причин, чтобы попытаться произвести строку, содержащей сериализованной хэша. Просто верните хэш.

def block(value,type) 
    { 
     'value' => value.to_i, 
     'type' => type 
    } 
end 

Если вы хотите превратить массив значений и типов в серию хэшей, вы должны использовать map на массиве.

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