otwarchive-symphonyarchive/app/models/media.rb

37 lines
1.2 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class Media < Tag
NAME = ArchiveConfig.MEDIA_CATEGORY_NAME
has_many :common_taggings, as: :filterable
has_many :fandoms, -> { where(type: 'Fandom') }, through: :common_taggings, source: :common_tag
after_create :expire_caches
after_update :expire_caches, if: -> { saved_change_to_name? || saved_change_to_type? || saved_change_to_canonical? }
after_destroy :expire_caches
def expire_caches
ActionController::Base.new.expire_fragment("menu-fandoms-version5")
ActionController::Base.new.expire_fragment("homepage-fandoms-version2")
end
def child_types
['Fandom']
end
# The media tag for unwrangled fandoms
def self.uncategorized
tag = self.find_or_create_by_name(ArchiveConfig.MEDIA_UNCATEGORIZED_NAME)
tag.update(canonical: true) unless tag.canonical
tag
end
# The list of media used for the menu on every page. All media except "No
# Media" and "Uncategorized Fandoms" are listed in order, and then
# "Uncategorized Fandoms" is tacked onto the list at the end.
def self.for_menu
canonical.by_name.where.not(
name: [ArchiveConfig.MEDIA_UNCATEGORIZED_NAME,
ArchiveConfig.MEDIA_NO_TAG_NAME]
).to_a + [uncategorized]
end
end