私は2つのレールサービスを持っています。1 つは UI といくつかの基本機能 (UIService) を提供し、もう 1 つは基になるモデルとデータベースの相互作用 (MainService) を管理します。
UIService には、アイテムのリストを収集し、それを使用して jQuery 経由で MainService に POST するフォームがあります。
次のように、javascript 配列を取得して、最初に 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」を使用してハッシュの配列に変換され、次のように Typhoeus を介して MainService に転送されます -
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"}}
したがって、アイテムの配列を「item_id」でキー化し、params に挿入する必要があります。ハッシュの配列として保持する方法をいくつか試しましたが、宛先では常に間違った形式になってしまいます。
文字列化する、文字列化しない、独自のハッシュ配列を作成するなど、さまざまな回避策を試しましたが、この時点でかなり行き詰まっています。何か案は?私が間違っていること、またはしていないことはありますか?他の JSON スキーマでも機能させることができますが、これに固執する必要があります。