scinote-web/app/models/report_element.rb
2021-06-18 10:40:00 +02:00

38 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class ReportElement < ApplicationRecord
enum type_of: Extends::REPORT_ELEMENT_TYPES
# This is only used by certain elements
enum sort_order: {
asc: 0,
desc: 1
}
validates :position, presence: true
validates :report, presence: true
validates :type_of, presence: true
belongs_to :report, inverse_of: :report_elements
# Hierarchical structure representation
has_many :children,
-> { order(:position) },
class_name: 'ReportElement',
foreign_key: 'parent_id',
dependent: :destroy
belongs_to :parent, class_name: 'ReportElement', optional: true
# References to various report entities
belongs_to :project, inverse_of: :report_elements, optional: true
belongs_to :experiment, inverse_of: :report_elements, optional: true
belongs_to :my_module, inverse_of: :report_elements, optional: true
belongs_to :step, inverse_of: :report_elements, optional: true
belongs_to :result, inverse_of: :report_elements, optional: true
belongs_to :checklist, inverse_of: :report_elements, optional: true
belongs_to :asset, inverse_of: :report_elements, optional: true
belongs_to :table, inverse_of: :report_elements, optional: true
belongs_to :repository, inverse_of: :report_elements, optional: true, class_name: 'RepositoryBase'
scope :active, -> { where(type_of: Extends::ACTIVE_REPORT_ELEMENTS) }
end