2

У меня есть Контроллер учетной записи в AngularJS для учетной записи, и на этой странице отображаются записи, относящиеся к этой учетной записи.404 Не найдена ошибка на ngResource delete в AngularJS & Rails

URL-адрес страницы на основе Acccount:

http://localhost:3000/#/accounts/16 

В моем контроллере счета я получить записи:

  Account = $resource('/accounts/:accountId', { 
       accountId: "@id", 
       format: 'json' 
      }, { 
       'save': { 
        method: 'PUT' 
       }, 
       'create': { 
        method: 'POST' 
       } 
      }); 

      var Record = $resource('/records/:recordId', { 
       recordId:'@id', 
       format: 'json' 
      }, { 
       'save': { 
        method: 'PUT' 
       }, 
       'create': { 
        method: 'POST' 
       }, 
       'delete': { 
        method: 'DELETE' 
       } 
      }); 

      if ($routeParams.accountId) { 
       Account.get({ 
        accountId: $routeParams.accountId 
       }, (function(account) { 
        return $scope.account = account; 
       }), (function(httpResponse) { 
        $scope.account = null; 
        return flash.error = "There is no account with ID " + $routeParams.accountId; 
       })); 

       Record.query({ 
        account_id: account_id 
       }, function(results) { 
        return $scope.records = results; 
       }); 

      } else { 
       $scope.account = {}; 
       $scope.records = []; 
      } 

Они отображаются на странице учетных записей:

<tbody> 
     <tr ng-repeat="record in records"> 
      <td>{{record.name}}</td> 
      <td>{{record.description}}</td> 
      <td> 
       <button type="submit" ng-click="deleteRecord(record)">Delete</button> 
      </td> 
     </tr> 
    </tbody> 

Метод удаления:

  $scope.deleteRecord = function(record) { 

       record.$delete(function() { 
        return flash.success = "Record deleted successfully."; 
       }); 

       var records = $scope.records; 

       for (var recordKey in records) { 
        if (records[recordKey]._id == record._id) { 
         $scope.records.splice(recordKey, 1); 
        } 
       } 
       return; 

      }; 

Моя проблема при попытке удалить запись, я получаю следующее сообщение об ошибке:

DELETE http://localhost:3000/records/2 [HTTP/1.1 404 Not Found 69ms] 

Следующий вывод отображаются в терминале, когда рельсы сервер:

Started DELETE "/records/2?format=json" for 127.0.0.1 at 2015-06-15 21:18:04 -0400 
Processing by RecordsController#destroy as JSON 
    Parameters: {"id"=>"2"} 
    Record Load (4.5ms) SELECT "records".* FROM "records" WHERE "records"."id" = $1 LIMIT 1 [["id", 2]] 
    Rendered text template (0.0ms) 
Completed 404 Not Found in 12ms (Views: 4.7ms | ActiveRecord: 4.5ms) 

Как я могу удалить записи, если я не на текущей странице для этой модели?

Удаление элементов таким образом работает, когда я удаляю конкретную модель страницы, на которой я состою (т. Е. Удаление учетной записи со страницы учетных записей).

Мои действия контроллера для справки:

def destroy 
    record = Record.find(params[:id]) 
    record.destroy! 
    head :no_content 
    end 

Любая помощь приветствуется.

Спасибо!

ответ

0

Прежде всего, я думаю, что вам не нужно устанавливать формат через параметр URL "/records/2?format=json". AngularJS по умолчанию отправляет заголовок Content-Type: application/json. И ваш контроллер должен также использовать этот способ, чтобы определить, какой формат использовать.

Во-вторых: Для того, чтобы подойти ближе к источнику проблемы, поставить отладчик заявление (или whatevery отладчик вы используете) здесь

def destroy 
    record = Record.find(params[:id]) 
    debugger 
    record.destroy! 
    head :no_content 
    end 

Затем сделайте свой JSon вызов. Когда вы попадаете в свой отладчик в своем терминале и все успешно уничтожается, вы ближе к проблеме.

Также попробуйте переслать некоторые реальные данные для запроса DELETE (см. Обсуждение здесь Is an entity body allowed for an HTTP DELETE request?).

+0

Спасибо за ответ. К сожалению, отладка не дает мне много других подсказок. В то время как я могу перешагнуть над операторами, запись не удаляется из базы данных, и консольная ошибка остается. Удаление 'format = json' нарушает запросы, поэтому может быть что-то, что мне нужно в моей конкретной настройке. Любые другие мысли о том, что это может быть? – viatori

0

Ошибка указывает на то, что маршрут рельсов не существует. Проверяли ли вы маршруты, чтобы убедиться, что маршрут DELETE существует в файле routes.rb?
В терминале запустить

rake routes 

Если вы не видите УДАЛИТЬ маршрут вы можете иметь что-то подобное в маршрутах.Р.Б.

resources :accounts do 
    resources :records, only: [:create, :index, :show] 
end 

Изменить его включить уничтожить

resources :acounts do 
    resources :records, only: [:create, :index, :show, :destroy] 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^