@yogaku

[Rails] Как правильно обновить поля в БД при сортировке элементов (массив)?

Здравствуйте.

В пост запросе отправляется строчка вида:
image_pos[0][id] 1
image_pos[1][id] 2
image_pos[2][id] 3
...

Пытаюсь на сервере у всех картинок поменять поле image_pos (отсортировать), ниже это то, что я уже сделал, а как выбрать только те записи которые я меняю, а не все. И в image_pos подставлять соответствующие значения.

Собственно в массиве записи вида: [{"image_pos": 1},{"image_pos": 2},{"image_pos": 2}]

params[:image_pos].each_with_index do |id, index|
   Image.update_all({image_pos: index})
end


UPD: Неужели никто не сталкивался с этой задаче?
  • Вопрос задан
  • 2459 просмотров
Пригласить эксперта
Ответы на вопрос 1
viktorvsk
@viktorvsk
update_all меняет значение всех записей на указанное. То есть, вы сначала всем картинкам ставите позицию 1, потом всем 2 и т.д.

Если в вашем цикле id - это id картинки, то нужно что-то вроде:
ActiveRecord::Base.transaction do
params[:image_pos].each_with_ibdex do |id, index|
Image.find(id).update_attributes(image_pos: index)
end
end


Но в данном случае index - это не то, что указали в форме, а просто по порядку от 1 до количества image_pos.
В общем, окончательная запись зависит от вашего хэша image_pos
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы