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。任何帮助表示赞赏。

编辑:

我在上面的代码中收到错误:“对象#没有方法‘保存’”

这是我的代码的大图:

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

您正在尝试将其保存newTaskTask资源的实例,但事实并非如此,您将其创建为空对象 ( $scope.newTask = {})。

您应该将其创建为$scope.newTask = new Task()

或者 save 就像您在第一行代码中所建议的那样:Task.save($scope.newTask).

调用的结果Task.save()将取决于服务器返回的内容,它是 JSON 数据,如果您在 POST 请求的 JSON 响应中返回新 ID,那么您将在数据中获取它,如果您只返回一个空的“created” " 响应,带有Location标头,您应该随后检索数据。如果你什么都不返回,那就是你触摸 ruby​​ 并从服务器返回一些有用的东西的地方。

于 2013-06-07T15:09:51.893 回答