このコミットが含まれているのは:
2026-09-28 01:15:00 +09:00
コミット 56b656109d
14個のファイルの変更、109行の追加、28行の削除
+23 -1
ファイルの表示
@@ -64,6 +64,7 @@ class Tag < ApplicationRecord
validates :category, presence: true, inclusion: { in: Tag.categories.keys }
validate :category_must_be_deerjikist_with_deerjikists
validate :tag_names_must_be_valid
CATEGORY_PREFIXES = {
'general:' => :general,
@@ -77,10 +78,22 @@ class Tag < ApplicationRecord
'mtr:' => :material,
'meta:' => :meta }.freeze
def tag_name(language_code) = tag_names.find_by(language_code:, primary_flg: true)
SYSTEM_TAG_NAMES = ['タグ希望', 'bot操作', 'ニジラー情報不詳', '動画', 'ニコニコ', 'YouTube'].freeze
def tag_name language_code
if tag_names.loaded?
tag_names.find { _1.language_code == language_code && _1.primary_flg }
else
tag_names.find_by(language_code:, primary_flg: true)
end
end
def name(language_code) = tag_name(language_code)&.name
def wiki_page = tag_name('ja')&.wiki_page
def system?
tag_name('ja')&.name.in?(SYSTEM_TAG_NAMES)
end
def deprecated? = deprecated_at?
def has_wiki = wiki_page.present?
@@ -232,6 +245,7 @@ class Tag < ApplicationRecord
tag = Tag.create!(tag_name_id: tn.id, category:)
tn.update!(tag:)
tag.association(:tag_names).reset
tag
rescue ActiveRecord::RecordNotUnique
@@ -307,6 +321,14 @@ class Tag < ApplicationRecord
private
def tag_names_must_be_valid
tag_names.each do |tag_name|
next if tag_name.valid?
tag_name.errors[:name].each { errors.add :name, _1 }
end
end
def category_must_be_deerjikist_with_deerjikists
if !(deerjikist?) && deerjikists.exists?
errors.add :category, 'ニジラーと紐づいてゐるタグはニジラー・カテゴリである必要があります.'