Как отправить POST запрос при сортировке элементов на странице (Nestable)?

Rails 4.1.1
Nestable

При перетаскивании элементов в методе sort падает ошибка "undefined method `each_with_index` for nil:NilClass"

js
$('.dd').nestable('serialize');
$('.dd').on('change', function() {
	$.post(
		$(this).data('update-url'),
		$(this).nestable('serialize')
		)
});


view
.dd data-update-url="#{sort_admin_list_pages_path(@list)}"
	ol.dd-list
		- @list.pages.order('position').each do |page|
			li.dd-item data-id="#{page.id}"
				.dd-handle = page.name


method
def sort
	params[:pages].each_with_index do |id, index|
		Page.where(id: id).update_all({position: index+1})
	end
	render nothing: true
end
  • Вопрос задан
  • 2893 просмотра
Пригласить эксперта
Ответы на вопрос 2
Vakiliy
@Vakiliy
Данные которые отправляются, не содержат параметры pages.

Cогласно документации .nestable('serialize'); идет отправка атрибутов data-*, у вас data-id, т.е. отправляется в виде (с оф. док.) [{"id":1},{"id":2},{"id":3,"children":[{"id":4},{"id":5}]}]

А принимаете почему-то вы pages:
params[:pages].each_with_index
Соответственно получаете ошибку, что для NilClass нет метода each_with_index.
Решение: или отправлять data-pages, или принимать :id
Ответ написан
gejarufu
@gejarufu Автор вопроса
Пробую возродить вопрос.
Сделал так. Может можно как-то массив сразу передать без преобразования?
$('.dd').on('change', function() {
 url = $(this).data('update-url'),
 array = $(this).nestable('serialize'),
 $.ajax({
   dataType: 'json',
   url: url,
   type: 'post',
   data: {id: array}
   })
 )
});

В POST запросе

Parameters
id[0][id] 1
id[1][id] 2

Source
id%5B0%5D%5Bid%5D=1&id%5B1%5D%5Bid%5D=2

Но потом падает на второй строчку в методе с ошибкой
Mysql2::Error: Truncated incorrect DOUBLE value:
def sort
	params[:id].each_with_index do |id, index|
		Page.where(id: id).update_all({position: index+1})
	end
        render nothing: true
end


В методе, я так понял, сортировка у меня будет работать только для одномерных массивов. Как правильно разруливать в методе дочерние элементы?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы