ActionController::RoutingError(没有路由匹配 [DELETE]

ActionController::RoutingError (No route matches [DELETE]

我正在尝试使用 angularJS 和 rails 从我的数据库中删除一条记录,但是当删除操作触发时它显示错误。

在浏览器日志中显示

DELETE http://localhost:3000/movies.json/1 404 (Not Found)

并且在 rails 控制台中显示,

Started DELETE "/movies.json/1" for 127.0.0.1 at 2015-08-26 09:42:07 +0200

ActionController::RoutingError (No route matches [DELETE] "/movies.json/1"):

localhost:3000/movies.json 可用,所以我不确定我是否遗漏了路线中的某些内容,或者我没有正确定位记录的 ID。

在我的 routes.rb 我有,

resources :movies, only: [:create, :destroy, :index, :show]

这是 AngularJS 服务,

.factory('removeMovie', ['$http', function($http) {
  return {
    deleteMovie: function(movieId) {
    var _movieId =  parseInt(movieId);
    return $http.delete('/movies.json/'+_movieId);
  }
 };
}])

和 AngularJS 控制器,

$scope.deleteMovie = function(movie){
  removeMovie.deleteMovie(movie.id).then(function(sucessResponse){
    //success callback
  },function(errorResponse){
    //Error callback
  })
}

这是动作开始的模板,

%div{"ng-repeat" => "movie in movies"}
  {{ movie.id }}
  {{ movie.title }}
  %a{"ng-click" => "deleteMovie(movie)"}delete

尽管我很确定这不是 AngularJS 问题而是 Rails 问题。这很奇怪,因为我的电影资源中有 destroy,但错误提示没有路由匹配。

如果我从资源中删除 :create,当我尝试创建一个新条目时,我会得到同样的错误(但是 POST 而不是删除)。

我猜路径应该是/movies/1.json

controller.json/id是URL的错误格式,应该是controller/id.json。您需要更改删除方法URL代:

.factory('removeMovie', ['$http', function($http) {
  return {
    deleteMovie: function(movieId) {
    var _movieId =  parseInt(movieId);
    return $http.delete('/movies/'+_movieId + '.json');
  }
 };