Пытаюсь сделать закладки с возможностью менять порядок. Есть users со связью один ко многим к bookmarks.
Добавил целочисленное поле priority к bookmarks.
Как в миграции проинкрементировать поле в общей куче примерно понимаю:
Bookmark.update_all('priority = priority + 1')
или
ActiveRecord::Base.transaction do
ActiveRecord::Base.connection.execute('SET @pri := 0;')
ActiveRecord::Base.connection.execute('UPDATE bookmarks SET priority = ( SELECT @pri := @pri + 1 ) ORDER BY updated_at ASC;')
end
Что даст следующее:
bookmarks:
user_id: 1, priority:1
user_id: 2, priority:2
user_id: 1, priority:3
user_id: 2, priority:4
А как сделать так чтобы поле было проинкрементировано по пользователю? Т.е. чтобы получить:
bookmarks:
user_id: 1, priority:1
user_id: 2, priority:1
user_id: 1, priority:2
user_id: 2, priority:2
База большая поэтому ищу решение с максимальным использованием средств бд(Mysql).