В моей БД есть таблица Страниц с полем с именем position.
Как я могу увеличить это значение на единицу, прежде чем оно будет сохранено?
Еще лучше, как я могу удалить неиспользуемые позиции и дать новой записи правильный номер позиции?
Вам нужен обратный вызов before_save:
В вашей модели страницы:
before_save :increase_position def increase_position self.position += 1 end
Вы можете добавить любую логику в метод увеличения_позиции для удаления неиспользуемых позиций.
вам нужно использовать плагин acs_as_list или настроить некоторые до и после фильтров.
before_create :set_position after_destroy :fix_positions def set_position self.position = Page.count + 1 end def fix_positions Page.order('position asc').all.each_with_index do |page, index| page.update_attribute(:position, index + 1) unless page.position == index + 1 end end