素材管理(#99) (#303)
#99 #99 #99 #99 #99 #99 #99 #99 #99 #99 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #303
This commit was merged in pull request #303.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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
|
||||
|
||||
validates :tag_id, presence: true, uniqueness: true
|
||||
|
||||
validate :file_must_be_attached
|
||||
validate :tag_must_be_material_category
|
||||
|
||||
def content_type
|
||||
return nil unless file&.attached?
|
||||
|
||||
file.blob.content_type
|
||||
end
|
||||
|
||||
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.character? || tag.material?
|
||||
|
||||
errors.add(:tag, '素材カテゴリのタグを指定してください.')
|
||||
end
|
||||
end
|
||||
@@ -31,6 +31,7 @@ class Tag < ApplicationRecord
|
||||
class_name: 'TagSimilarity', foreign_key: :target_tag_id, dependent: :delete_all
|
||||
|
||||
has_many :deerjikists, dependent: :delete_all
|
||||
has_many :materials
|
||||
|
||||
belongs_to :tag_name
|
||||
delegate :wiki_page, to: :tag_name
|
||||
@@ -72,6 +73,8 @@ class Tag < ApplicationRecord
|
||||
|
||||
def has_wiki = wiki_page.present?
|
||||
|
||||
def material_id = materials.first&.id
|
||||
|
||||
def self.tagme
|
||||
@tagme ||= find_or_create_by_tag_name!('タグ希望', category: :meta)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user