match.rb 728 Bytes
class Match < ApplicationRecord

  belongs_to :pool, inverse_of: :matches
  has_many :bets, dependent: :destroy, inverse_of: :match
  validates :visit, :local, :date, :pool, presence: true
  enum result: [:visit, :tie, :local]

  scope :active, -> { joins(:pool).where(pools: { active: true}) }
  scope :upcoming, -> { active.where('date > ?', Time.zone.now) }

  before_save :calculate
  after_save :calculate_bets


  def calculate
    return unless score_local && score_visit
    self.result = find_result
  end

  def find_result
    return :tie if score_local == score_visit
    return :local if score_local > score_visit
    :visit
  end

  def calculate_bets
    return unless result
    bets.each(&:calculate)
  end
end