2013-06-14 1 views
2

У меня есть два рельсовых сервиса. Один обслуживает пользовательский интерфейс и некоторые базовые функции (UIService), а другой - управляет базовыми моделями и взаимодействиями с базами данных (MainService).вопрос с передачей массива хешей в качестве параметра POST в приложении rails с тифом

В UIService у меня есть форма, которая собирает список элементов и использует это для POST для MainService через jQuery.

Я беру яваскрипт массив и вызвать jQuery.post к UIService первым, как это -

var selected_items = new Array(); 
// Filled up via the form... 
params={"name":$("#name_input").val(), 
     "items": selected_items }; 
jQuery.post("/items", params); 

Это затем преобразуется в массив хэш с ключом «item_id», а затем направляется в MainService через Typhoeus как это -

items = [] 
item = {} 
params[:items].each do |i| 
    item[:item_id] = i 
end 
## Gives me this ---> items = [ {item_id: 189}, {item_id: 187} ] 

req = Typhoeus::Request.new("#{my_url}/items/", 
          method: :POST, 
          headers: {"Accepts" => "application/json"}) 
hydra = Typhoeus::Hydra.new 
hydra.queue(req) 
hydra.run 

на MainService, мне нужна схема JSON, чтобы быть в определенном формате. В основном массив элементов ... как это -

{ "name": "test_items", "items": [ {"item_id":"189"},{"item_id": "187"} ] } 

Вопрос заключается в том, что, когда я собираю массив из JQuery и передать его в UIService, это выглядит в Params -

[ {item_id: 189}, {item_id: 187} ] 

Но, когда он прибывает в MainService, становится это -

{"name"=>"test_items", 
"items"=>{"0"=>{"item_id"=>"189"}, "1"=>{"item_id"=>"187"}} 

Итак, мне нужен массив элементов, которые будут key'ed с «item_id» и вставляется в Params. Я попробовал несколько способов сохранить его как массив хэшей, но он всегда попадает в неправильный формат в пункт назначения.

Я пробовал различные обходные пути, такие как подтягивание, а не подтягивание, создание собственного массива хэшей и т. Д. Я довольно застрял в этой точке. Есть идеи? Все, что я делаю неправильно или не делаю? Я могу заставить его работать с другими схемами JSON, но мне нужно придерживаться этого.

ответ

3

Проблема была с тем, как я проходил параметры в Typhoeus

ранее (с выпуском) -

req = Typhoeus::Request.new("#{Rails.application.config.custom_ads_url}/groups", 
          method: :POST, 
          params: parameters, 
          headers: {"Content-Type" => "application/json",  "AUTHORIZATION" => "auth_token #{user.auth_token}"}) 

после (работ) - уведомление, что мне нужно, чтобы преобразовать в формат JSON и положил его в тело. «params» в тифе считался обычным хешем.

req = Typhoeus::Request.new("#{Rails.application.config.custom_ads_url}/groups", 
          method: :POST, 
          body: parameters.to_json, 
          headers: {"Content-Type" => "application/json", "AUTHORIZATION" => "auth_token #{user.auth_token}"})