class Material < ApplicationRecord include MyDiscard default_scope -> { kept } belongs_to :parent, class_name: 'Material', optional: true has_many :children, class_name: 'Material', foreign_key: :parent_id, dependent: :nullify belongs_to :tag, optional: true belongs_to :created_by_user, class_name: 'User', optional: true belongs_to :updated_by_user, class_name: 'User', optional: true has_one_attached :file, dependent: :purge validate :file_must_be_attached validate :tag_must_be_material_category private def file_must_be_attached return if url.present? || file.attached? errors.add(:url, 'URL かファイルのどちらかは必須です.') end def tag_must_be_material_category return if tag.blank? || tag.material? errors.add(:tag, '素材カテゴリのタグを指定してください.') end end