class MonsterKill < ApplicationRecord belongs_to :monster belongs_to :character validates :quantity, numericality: { greater_than_or_equal_to: 0, only_integer: true } scope :ordered_by_monster_name, -> { includes(:monster).order("monsters.name") } after_save :award_titles private def award_titles character.award_title("spiteful") if quantity >= 1000 character.award_title("hateful") if quantity >= 10_000 character.award_title("vicious") if quantity >= 100_000 all_kills_quantity = character.monster_kills.sum(:quantity) character.award_title("slayer") if all_kills_quantity >= 1_000 character.award_title("butcher") if all_kills_quantity >= 10_000 character.award_title("slaughterer") if all_kills_quantity >= 100_000 character.award_title("massacrer") if all_kills_quantity >= 1_000_000 end end