Я придерживался этого в течение всего дня.
На 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');
}
})
Когда я нажимаю ссылку delete, я получаю эту ошибку в консоли 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-код очень хаотичен, я попытался изменить учебник, который я нашел в Интернете, но он не работает.
Что не так в этой попытке?
Заранее спасибо.
Вам необходимо передать идентификатор записи, которую вы пытаетесь удалить, в качестве параметра в вызове Rails. Rails сообщает вам, что не может найти маршрут, потому что у вас нет идентификатора.
Поскольку вы не определяете действие DELETE на своей фабрике, вероятно, почему идентификатор не проходит. Вы также можете попробовать явно передать 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
TypeError: Cannot read property 'delete' of undefined
в консоли JS. Нужно ли включать в проект еще несколько библиотек?