Невозможно обработать HTTP 422 с лучшими на месте рельсами
У меня есть мой код контроллера, как это:
def update
respond_to do |format|
if refresh_quantity_in_inventory
format.json { render json: { message: "Quantity successfully updated" } }
else
format.json { render json: @errors, status: :unprocessable_entity }
end
end
конец
CoffeeScript для этого выглядит так:
ready = ->
$('#best_in_place_cart_quantity').best_in_place().bind 'ajax:error', (evt, data, status, xhr) ->
alert xhr
alert xhr.status
if (xhr.status == 422)
alert("Inventory count is not enough")
$(document).ready ready
$(document).on "page:load", ready
Я также пытался ajax:success
но ни один не вызывает обратный вызов. Как мне поймать 422? Что я должен делать?
$('#best_in_place_cart_quantity').best_in_place().done((data, status, response) ->
alert 'Done handler. HTTP code: ' + response.status
return
).fail (error) ->
alert 'Fail handler. HTTP code: ' + error.status
return
Это тоже не сработало.
2 ответа
Решение
Это код, который наконец-то сработал.
$('.best_in_place_cart_quantity').best_in_place()
$(".best_in_place_cart_quantity").bind 'ajax:error', (evt, data, status, xhr) ->
alert "Not enough quantity"
Извлеченный урок состоял в том, что лучше всего связывать поля вместо полей через Id.
Этот пример кода показывает, как обрабатывать ошибки HTTP, используя JQuery (например, 422):
$.get('http://httpbin.org/status/422')
.done(function(data, status, response) {
alert('Done handler. HTTP code: ' + response.status);
})
.fail(function(error) {
alert('Fail handler. HTTP code: ' + error.status);
});
Вот фрагмент этого кода.
Попробуйте принять код выше и заменить ready
обработчик для:
$ ->
// your code here