mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-18 07:01:58 +08:00
38 lines
1.4 KiB
Ruby
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
|