У меня есть редактирование на месте в моем приложении (с использованием 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. Мне не ясно, как бы я использовал его для обработки общего случая сбоя «сохранения» при успешной проверке.