Как показать ошибки сервера в Rails 2.3.5 с JSON и jQuery - PullRequest
8 голосов
/ 22 марта 2010

У меня есть редактирование на месте в моем приложении (с использованием Rails 2.3.5 и jQuery). Я хочу знать, как отобразить ошибку на странице при сбое обновления.

Я использую ajax (XMLHttpRequest), чтобы сохранить обновление в объекте Comment. Контроллер имеет метод обновления, подобный следующему:

def update
  @comment = Comment.find(params[:id])
  respond_to do |format|
    # if @comment.update_attributes!(params[:comment])
    if false #deliberately forcing a fail here to see what happens
      format.json { render :nothing =>  true }
    else
      format.json { render :json => @comment.errors, :status => :unprocessable_entity }
    end
  end
end

В Firebug я вижу, что сервер возвращает «422» (соответствующий код состояния ошибки проверки). Но это ответ на запрос XMLHttpRequest, поэтому перенаправление на страницу ошибки отсутствует.

Я думаю, что на самом деле хочу сделать это:

format.json { render :json => @comment.errors}

или, может быть, это:

format.json {render :json => { :status => :error, :message => "Could not be saved" }.to_json, :status => 400 }

и вызвать некоторую функцию Javascript, которая перебирает (и отображает) любые ошибки.

Я использую плагин rails REST in Place для реализации редактирования на месте. Кажется, у него нет функции обратного вызова для обработки ошибки. Какие у меня варианты? Могу ли я написать Javascript для ответа на условие сбоя без взлома плагина? Должен ли я взломать плагин rest_in_place для обработки условия сбоя? Есть ли лучший плагин (для Rails или jQuery), который обрабатывает редактирование на месте, включая условия сбоя?

UPDATE

Этот пост от Питера Буя Стандартный ответ JSON для Rails и jQuery помог показать, как обрабатывать сообщение об ошибке с сервера, используя XMLHttpRequest.status. Я посмотрел на его реализацию блога, используя ajax paydro-talk . Я удивлен сложностью, необходимой для обработки простого состояния ошибки. Обычно в Rails есть все, что нужно, но кажется, что ошибки сервера с JSON выходят за рамки. Это может быть?

Я также посмотрел на validation-on-rails * от Grimen, который вмещает проверки моделей при использовании ajax XMLHttpRequest. Мне не ясно, как бы я использовал его для обработки общего случая сбоя «сохранения» при успешной проверке.

1 Ответ

1 голос
/ 22 марта 2010

Я думаю, что вашим лучшим вариантом может быть просто взломать плагин в этом случае, так как действительно глупо, что плагин в любом случае не имеет обработчика ошибок.Подсказка: возможно, сообщите автору плагина, что было бы неплохо и полезно обрабатывать ошибки (что, если соединение не удалось или что-то еще? Плагин никогда не узнает и не получит обратной связи для пользователя).

Этого должно быть достаточно, если выдобавьте что-то подобное вокруг строки 33 в jquery.rest_in_place.js после опции успеха

"error": function(xhr, state, error) {
  //do error handling here e.g.
  alert(state);
  //or $.parseJSON(xhr.responseText) and whatever or similar
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...