Невозможно обработать 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
Другие вопросы по тегам