0

AngularJS のフォームから追加された新しいレコードを作成するには、次のようにします。

task = Task.save($scope.newTask)

ただし、保存時に作成された新しい ID も取得する必要があります。ここにある答え: AngularJS $save の呼び出し後に更新された値を取得していないことは、必要なものに対処しているようですが、CoffeeScript に変換すると:

task = $scope.newTask
task.$save (msg, headers) ->
  console.log task.id

それは動作しません。Ruby on Rails を使用しています。どんな助けでも大歓迎です。

編集:

上記のコードでエラーが発生します:「オブジェクト # にはメソッド 'save' がありません」

ここに私のコードの全体像があります:

app = angular.module("appName", ["ngResource"])

app.factory "Task", ["$resource", ($resource) ->
  $resource("/projects/:project_id/tasks/:id", {project_id: "@project_id", id: "@id"}, {update: {method: "PUT"}, destroy: { method: 'DELETE' }})
]

@TaskCtrl = ["$scope", "Task", ($scope, Task) ->
  $scope.tasks = Task.query()

  $scope.saveTask = ->
      task = $scope.newTask
      task.$save (msg, headers) ->
        console.log task.id
      $scope.tasks.push(task)
      $scope.newTask = {}
]
4

1 に答える 1

1

newTaskリソースのインスタンスとして保存しようとしていますTaskが、そうではありません。空のオブジェクト ( $scope.newTask = {}) として作成しています。

次のように作成する必要があります$scope.newTask = new Task()

または保存は、コードの最初の行で提案されているようです: Task.save($scope.newTask).

呼び出しの結果はTask.save()、サーバーが返すものによって異なります。これは JSON データです。POST 要求の JSON 応答で新しい ID を返す場合は、空の "created "Locationヘッダー付きの応答の場合、後でデータを取得する必要があります。何も返さない場合は、そこが ruby​​ に触れ、サーバーから有用なものを返すポイントです。

于 2013-06-07T15:09:51.893 に答える