# frozen_string_literal: true class ChecklistEntry < ApplicationRecord belongs_to :checklist belongs_to :check before_validation :set_position before_create :update_positions before_update :update_positions, if: :position_changed? def set_position self.position ||= (checklist.checklist_entries.pluck(:position).max || 0) + 1 end def normalize_positions checklist.checklist_entries.where.not(id:).find_by(position:)&.update_attribute(:position, position_was) # checklist.checklist_entries.order(:position).each_with_index do |entry, index| # entry.update_column(:position, index + 1) if entry.position != index + 1 # end end def update_positions if position_was checklist.checklist_entries.where("position > ?", position_was).update_all("position = position - 1") end checklist.checklist_entries.where(position: position..).update_all("position = position + 1") end end