Пустое тело, когда response_with используется в Rails 5
Я пытаюсь визуализировать партиал из контроллера в rails 5, используя ajax(в случае успеха), но пустые данные передаются в ajax после того, как действие рендерит партиал.
Тот же код работал с rails4. Я также обновил самоцвет респондента для rails5.
контроллер:
respond_with do |format|
format.html do
if request.xhr?
@images = get_images
session[:prev_images] = submitted_ids
session[:prev_winner] = winner_id
@prev_images = Lentil::Image.find(submitted_ids).sort_by{ |i| i.id }
@prev_winner = session[:prev_winner]
render :partial => "/lentil/thisorthat/battle_form", :locals => { :images => @images, :prev_images => @prev_images, :prev_winner => @prev_winner }, :layout => false, :status => :created
end
end
Ajax:
$(document).on('ajax:success', function (evt, data, status, xhr) {
// Insert new images into hidden div
$('.battle-inner:eq(1)').replaceWith(data);
$('.battle-inner:eq(1)').imagesLoaded()
.done(function () {
// Remove old images
$('.battle-wrapper:eq(0)').remove();
// Div with new images moves up in DOM, display
$('.battle-wrapper:eq(0)').show();
// Hide Spinner
$('#spinner-overlay').hide();
});
_battle_form:
<div class="grid battle-inner">
<%= semantic_form_for :battle, :remote => true, :url => thisorthat_result_path do |form| %>
<% @images.each do |image| %>
<div class="battle-image-wrap grid__cell">
</div>
<% end %>
<% end %>
</div>
2 ответа
Ваш запрос обрабатывается как JS?
Попробуйте заменить format.html
в format.js
Это была проблема с jquery-ujs, которая больше не является зависимостью для rails>5.1. Вместо этого нужно использовать зависимость rails-ujs.
// Для чтения данных из ответа
.on('ajax:error', function(event) {
var detail = event.detail;
var data = detail[0], status = detail[1], xhr = detail[2];
// ...
});