mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-10 22:53:06 +08:00
26 lines
891 B
Ruby
26 lines
891 B
Ruby
# frozen_string_literal: true
|
|
|
|
class ProjectFolder < ApplicationRecord
|
|
include SearchableModel
|
|
include SearchableByNameModel
|
|
|
|
validates :name,
|
|
length: { minimum: Constants::NAME_MIN_LENGTH,
|
|
maximum: Constants::NAME_MAX_LENGTH },
|
|
uniqueness: { scope: :team_id, case_sensitive: false }
|
|
|
|
before_validation :inherit_team_from_parent_folder, if: -> { parent_folder.present? }
|
|
|
|
belongs_to :team, inverse_of: :project_folders, touch: true
|
|
belongs_to :parent_folder, class_name: 'ProjectFolder', optional: true
|
|
has_many :projects, inverse_of: :project_folder, dependent: :nullify
|
|
has_many :project_folders, foreign_key: 'parent_folder_id', inverse_of: :parent_folder, dependent: :destroy
|
|
|
|
scope :top_level, -> { where(parent_folder: nil) }
|
|
|
|
private
|
|
|
|
def inherit_team_from_parent_folder
|
|
self.team = parent_folder.team
|
|
end
|
|
end
|