3

私は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 スキーマでも機能させることができますが、これに固執する必要があります。

4

3 に答える 3

1

Typhoeus が提供する正しい変換を行うミドルウェアもあります: http://rubydoc.info/github/typhoeus/typhoeus/frames/Rack/Typhoeus/Middleware/ParamsDecoder

于 2013-06-19T08:21:13.043 に答える