# frozen_string_literal: true class CharacterSheetSection < ApplicationRecord belongs_to :character belongs_to :parent_section, optional: true, class_name: "CharacterSheetSection" has_many :character_sheet_subsections, class_name: "CharacterSheetSection", foreign_key: :parent_section_id, dependent: :destroy has_many :character_sheet_features has_many :stats, dependent: :destroy, through: :character_sheet_features, source: :featurable, source_type: "Stat" has_many :text_fields, dependent: :destroy, through: :character_sheet_features, source: :featurable, source_type: "TextField" validates :name, presence: true, length: { maximum: 255 } scope :top_level, -> { where.missing(:parent_section) } def lowest_order_index character_sheet_features.minimum(:order_index) || 1 end def highest_order_index character_sheet_features.maximum(:order_index) || 1 end end