Rails + Angularjs:如何与后端进行通信(从数据库中删除记录)?

时间:2015-10-15 23:25:31

标签: javascript ruby-on-rails ruby angularjs

我坚持了一整天。

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代码非常混乱,我试图修改我在互联网上找到的教程,但它不能很好地工作。

这次尝试有什么问题?

提前谢谢。

1 个答案:

答案 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