mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-10-31 08:26:31 +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
 |