traveller/app/models/admission.rb

25 lines
841 B
Ruby

class Admission < ApplicationRecord
belongs_to :country, inverse_of: :admissions
belongs_to :person, inverse_of: :admissions
belongs_to :previous, class_name: name, inverse_of: :next, optional: true
has_one :next, class_name: name, foreign_key: :previous_id, inverse_of: :previous
scope :ordered, -> { order(:arrived_on, :previous_id) }
scope :before, -> (date) { where("#{table_name}.arrived_on <= ?", date) }
scope :after, -> (date) { where("#{table_name}.arrived_on >= ?", date) }
around_create :set_previous
before_destroy :update_nexts_previous
def set_previous
self.previous ||= person.admissions.ordered.before(arrived_on).last
future_next = previous&.reload_next
yield
future_next&.update(previous: self)
end
def update_nexts_previous
self.next&.update(previous: previous)
end
end