Ruby on Rails gem rest-client неправильно передает параметры массива - PullRequest
0 голосов
/ 24 сентября 2018

У нас есть форма, которая будет перехватывать количество входных данных X, поэтому мы использовали массивы для настройки информации.

Когда мы печатаем параметры, они выглядят следующим образом:

{
  "utf8" => "✓", "authenticity_token" => "DfpQDLOJBuc7ViR3XfY3iaK3/E9Hy9uQBWF8fwSkig0nchqj62DptkGunHOrH5bd79J0L+kG0P758cDqLJx7PQ==", "user" => "1", "Base" => {
    "cliente" => "1", "retencion" => "14", "anio" => "2018", "mes_inicio" => "9", "mes_fin" => "9", "serie" => "1", "nacionalidad" => "Nacional", "montoTotOperacion" => "11111.1", "montoTotGrav" => "11111.1", "montoTotExent" => "0.0", "montoTotRet" => "1111.1"
  }, "Dividendos" => [{
    "CveTipDivOUtil" => "01",
    "MontISRAcredRetMexico" => "0.0",
    "MontISRAcredRetExtranjero" => "0.0",
    "MontRetExtDivExt" => "0.0",
    "TipoSocDistrDiv" => "Sociedad Nacional",
    "MontISRAcredNal" => "0.0",
    "MontDivAcumNal" => "0.0",
    "MontDivAcumExt" => "0.0"
  }]
}

Как вывидим, что объект "Dividendos" может быть множественным массивом, поэтому мы отправляем данные в наш API (Laravel Lumen).

    response = RestClient.post ENV["URL_API"]+'/createCFDI', { user: current_user.id, Dividendos: params[:Dividendos] }, {content_type: :json, accept: :json}

Основная проблема заключается в том, что Rails отправляет массив ответа типа "Dividendos" как строку.

array(2) {
  ["user"]=>
  string(1) "1"
  ["Dividendos"]=>
  array(1) {
    [0]=>
    string(235) "{"CveTipDivOUtil"=>"01", "MontISRAcredRetMexico"=>"0.0", "MontISRAcredRetExtranjero"=>"0.0", "MontRetExtDivExt"=>"0.0", "TipoSocDistrDiv"=>"Sociedad Nacional", "MontISRAcredNal"=>"0.0", "MontDivAcumNal"=>"0.0", "MontDivAcumExt"=>"0.0"}"
  }
}

Почему все данные в порядке, но только для вложенного массива отправляют их в виде строки?

Мы что-то упустили?

1 Ответ

0 голосов
/ 24 сентября 2018

Проблема в том, что params[:Dividendos] возвращает строку.

Вы должны разобрать его в хеш, а затем, RestClient снова проанализирует его в JSON

Dividendos: JSON.parse(params[:Dividendos])
...