要创建从AngularJS中的表单添加的新记录,我有:
task = Task.save($scope.newTask)
但我还需要检索保存时创建的新ID。答案在这里找到:Not getting updated values after call to 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 = {}
]
答案 0 :(得分:1)
您正在尝试保存newTask
,因为它是Task
资源的一个实例,但事实并非如此,您将其创建为空对象($scope.newTask = {}
)。
您应该将其创建为$scope.newTask = new Task()
或者保存就像您在第一行代码中建议的那样:Task.save($scope.newTask)
。
Task.save()
调用的结果将取决于服务器返回的内容,它是JSON数据,如果您在POST请求的JSON响应中返回新ID,那么您将在数据中获取它,如果您只返回一个空的“已创建”响应,并带有Location
标题,则您随后检索数据。如果你什么都没有返回,那就是你触摸ruby的点,并从服务器返回一些有用的东西。