# frozen_string_literal: true class ChecklistEntry < ApplicationRecord belongs_to :checklist belongs_to :check before_validation :set_position before_update :update_positions, if: :position_changed? def set_position self.position ||= (checklist.checklist_entries.pluck(:position).max || 0) + 1 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