我坚持了一整天。
在http://localhost:3001/posts/
上,我列出了我在数据库中的所有帖子。我试图使用Angularjs删除任务 - 数据库中的每个加载记录都有一个删除链接:
= link_to 'Delete', '', 'ng-click' => "deletePost('#{post.id}')", :id => "post_#{post.id}"
然后我有一个文件/assets/javascript/angular/controller/posts.js
,如下所示:
var app = angular.module('AngTestApp', ['ngResource']);
app.factory('Post', function($resource) {
return $resource("/posts/:id", { id: '@id' }, {
index: { method: 'GET', isArray: true, responseType: 'json' },
show: { method: 'GET', responseType: 'json' },
update: { method: 'PUT', responseType: 'json' }
});
})
app.controller("PostsCtrl", function($scope, Post) {
$scope.posts = Post.index();
$scope.deletePost = function(index) {
console.log("index: "+index);
post = $scope.posts[index];
Post.delete(post);
$scope.posts.splice(index, 1);
console.log('aa');
}
})
当我点击删除链接时,我在JS控制台中收到此错误:
DELETE http://localhost:3001/posts 404 (Not Found)
并在终端:
Started DELETE "/posts" for 127.0.0.1 at 2015-10-15 16:23:08 -0700
ActionController::RoutingError (No route matches [DELETE] "/posts"):
路线如下:
resources :posts do
resources :comments
end
JS代码非常混乱,我试图修改我在互联网上找到的教程,但它不能很好地工作。
这次尝试有什么问题?
提前谢谢。
答案 0 :(得分:1)
您需要将您尝试删除的记录的ID作为Rails调用中的参数传递。 Rails告诉你它找不到路由,因为你没有ID。
由于您未在工厂中定义DELETE操作,这可能是ID未通过的原因。你也可以尝试显式地将id作为参数传递,如下所示: $ resource采用params属性,因此您可以像这样修改工厂:
app.factory('Post', function($resource) {
return $resource("/posts/:id", { id: '@id' }, {
index: { method: 'GET', isArray: true, responseType: 'json' },
show: { method: 'GET', responseType: 'json' },
update: { method: 'PUT', responseType: 'json' },
delete: { method: 'DELETE', params: '@id', responseType: 'json' }
});
})
$ resource文档非常有用:https://docs.angularjs.org/api/ngResource/service/ $ resource