25 lines
841 B
Ruby
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
|