Как вернуть содержимое в ответе 403 в Rails? - PullRequest
4 голосов
/ 22 декабря 2010

Когда мое действие контроллера не удается, я возвращаю 403 с некоторыми данными JSON, чтобы я мог включить подробности ошибки (например, ошибки ActiveRecord). Проблема в том, что содержимое ответа (как видно из инструментов разработчика Chrome) кажется пустым.

Должен ли я возвращать 200, даже если запрошенное действие не выполнено, и затем проверить данные JSON в обработчике события «ajax: success»? Это кажется немного странным. В идеале я хотел бы получить доступ к данным в обработчике «ajax: error».

Я новичок в программировании в стиле API, поэтому не знаю лучших практик.

1 Ответ

3 голосов
/ 22 декабря 2010

Я не знаю, является ли это лучшей практикой или нет, но я сделал это следующим образом:

В контроллере, если произошла ошибка:

render :new, :status => :bad_request

new.js.erb - это исходное представление, включая форму с ошибками.

JavaScript:

$('#the_form').live('ajax:failure', function(evt, xhr, status, error) {
  if (xhr.status == 400) {
    alert(xhr.responseText);
  } else {
    alert('Generic error message');
  }
});

Rails отправляет 500 (: internal_server_error) при возникновении исключений. Это покрыто остальным в JavaScript, но, как вы видели, у вас не будет возможности вернуть ошибку или перерисовать форму в этом случае. Мне пришлось использовать другой код состояния, чтобы он отображал содержимое, но все равно попадал в событие ajax: fail.

Вот список отображений кодов состояния . Я выбрал 400, потому что это был самый близкий матч.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...