1

オブジェクトを適切にレール 3.2 コントローラー アクションにシリアル化するために、Angular リソースを取得しようとしています。データ形式は JSON であり、(Rails 側で) 必要な作業入力は次のようになります。

"data"=>[{"id"=>29, "column"=>0, "position"=>0}], "id"=>"2", "page"=>{}

これは古いコードで動作します:

$.ajax
  type: "put"
  url: target
  dataType: "json"
  contentType: "application/json"
  data: JSON.stringify({data: widgets})

ただし、角度リソースを試してみると、代わりに以下のようなものが得られます:

"data"=>"[{\"id\":28,\"column\":2,\"position\":0}]", "id"=>"2", "page"=>{"id"=>"2"}

私は最初に工場を作成しました:

app.factory "Page", ["$resource", ($resource) ->
  $resource "/admin/pages/:collectionRoute:id/:memberRoute",
  {
    id: "@id",
    memberRoute: "@memberRoute",
    collectionRoute: "@collectionRoute",
  },
  {
    update: {method: "PUT"}
    store_widgets: { method: "PUT", params: { data: "@data", memberRoute: 'store_widgets' }, isArray: true }
  }
]

...そして次のようにstore_widgets関数を呼び出しました:

Page.store_widgets(id: $scope.page_id, data: JSON.stringify(widgets) )

データ パラメータを設定するための代替手段をいくつか試しましたが、うまくいかないようです。[Object object]それは、またはプレーン文字列として投稿されます。

$resource によって送信されたリクエストを、純粋な jQuery Ajax を使用して動作しているものとまったく同じにする方法についての提案はありますか?

4

3 に答える 3

1

dataリクエスト本文とクエリパラメータのどちらで渡すかによって、次のようになります。

クエリパラメータ:

// 'store_widgets' action definition
store_widgets: {
  method: "PUT",
  params: {
    id: "@id",
    data: "@data",
    memberRoute: 'store_widgets'
  },
  isArray: true
}

電話:

function MyCtrl($scope, Page) {

  $scope.widget = [
    {"id":29, "column":0, "position":0}
  ];

  Page.store_widgets({id: 2, data: $scope.widget, page: {}});

}

プランカー


リクエスト本文:

電話:

Page.store_widgets({id: 2, page: {}}, {data: $scope.widget});


Ass $ resourceのドキュメントによると:

クラスオブジェクトまたはインスタンスオブジェクトのアクションメソッドは、次のパラメータを使用して呼び出すことができます。

  1. HTTP GET「クラス」アクション:Resource.action([parameters]、[success]、[error])
  2. 非GET「クラス」アクション:Resource.action([parameters]、postData、[success]、[error])
  3. 非GETインスタンスアクション:instance。$ action([parameters]、[success]、[error])
于 2013-03-18T15:14:51.167 に答える