Rails JQuery Ajax: ошибка обновления строки таблицы 404 - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть таблица order_items, где каждый order_item представлен в строке таблицы кнопкой «set_aside».Цель состоит в том, чтобы выполнить действие контроллера set_aside для отдельного элемента заказа и обновить только ту строку таблицы с обновленной строкой таблицы, которая содержит новый статус order_item.

Действие контроллера:

order_items_controller.rb

def set_aside
  @order_item = OrderItem.find(params[:id])
  respond_to do |format|
    format.js
  end
end

My set_aside.js.erb :

$('#<%= @order_item.id %>').load("<%= j render 'admin/shipments/packing_item_row.haml', locals: {i: @order_item, index: 1} %>");
$('#<%= @order_item.id %>').show();

Представление admin/shipments/packing.haml и содержиттаблица, в которой каждая строка таблицы переменной экземпляра @order_items отображается как частичная "packaging_item_row", а все строки таблицы имеют установленный идентификатор.

Вот где я застрял:

Использование функции .load() продолжает выдавать ошибку, которую я вижу в Web Inspector / XHR.

Веб-инспектор показывает, что действие set_aside правильно включает order_item.id и связанный HTML-код в вызове рендеринга.Но затем есть второй XHR-запрос, который выдает ошибку состояния 404, пытаясь также загрузить ресурс admin/shipments/%3Ctr%3E%Ctd.

Подчинение в методе .html, кажется, прекрасно загружает частичное, так что это недело в частичном прохождении неисправных местных жителей. Но функция загрузки просто не работает, и я не уверен, что еще можно попробовать на этом этапе.

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 15 декабря 2018

Почему это не работает

Из документов jQuery видно, что load() принимает URL-адрес, а вы предоставляете ему некоторый HTML.

Таким образом, это означает, что он пытается получить доступ к URL, который является возвращаемым значением HTML.

Это, я подозреваю, откуда приходит admin/shipments/%3Ctr%3E%Ctd URL.

%3Ctr%3E%Ctd gobbledegookRails возвращает HTML в jQuery.

jQuery, в свою очередь, пытается понять его как URL.< закодировано как %3C - оно берет начало первой таблицы в вашем представлении.

Почему вы не можете использовать html()?

Это самый простой способ, и пробовал ипроверено в этом сценарии.Если есть веская причина, по которой вы не хотите использовать html() ...

Как использовать load()

Если вы действительно хотите использовать нагрузку, вам нужно создатьмаршрут для этого частичного рендеринга.

Если маршрут называется admin_shipments_packing_item_path, вы бы сделали что-то вроде:

$('#<%= @order_item.id %>').load("<%= j admin_shipments_packing_item_path(@order_item) %>");

Есть еще вопросы, просто задавайте!

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