Привет, всем!
Как человек, который хостит свой инстанс, я недавно подхватил «цифровое ОКР». У меня остались удалённые категории и теги от ранних дней тестирования, и мне очень хотелось вернуть эти чистые однозначные ID (например, ID категории 2 и ID тега 3), вместо того чтобы оставлять пробелы в базе данных.
Я знаю, что интерфейс это не поддерживает, поэтому я зашёл в консоль Rails (./launcher enter app → rails c), чтобы вручную всё восстановить. Сейчас на фронтенде всё выглядит и работает идеально, но мне любопытно, видят ли эксперты по базе данных здесь какие-то скрытые опасности или долгосрочные «мины замедленного действия» в таком подходе.
Вот точный, детальный рабочий процесс, который я выполнил:
1. Пересоздание удалённой категории с её старым ID и полными атрибутами: Вместо того чтобы просто принудительно задать ID, я предоставил необходимые атрибуты, чтобы запись была полной.
Ruby
Category.create!(
id: 2,
name: "Site Feedback",
color: "0088CC",
text_color: "FFFFFF",
user_id: -1 # Системный пользователь
)
2. Восстановление исходной темы и привязка её как описания категории:
Ruby
Topic.with_deleted.find(1).recover!
Category.find(2).update!(topic_id: 1)
3. Очистка подтипа темы (возврат к стандартному значению по умолчанию): Я проверил другие категории по умолчанию и заметил, что темы их описаний просто используют nil, поэтому я вернул его к заводскому состоянию.
Ruby
Topic.find(1).update!(subtype: nil)
4. Массовое пересоздание старых тегов для заполнения пробелов в ID:
Ruby
Tag.create!([
{ id: 3, name: "private-school" },
{ id: 7, name: "tennis" }
])
Мой главный вопрос: Я полностью понимаю, что практической необходимости в этом нет, кроме как удовлетворить моё собственное ОКР. Однако, строго с точки зрения структуры, безопасно ли то, что базовые методы ActiveRecord, такие как .update! и .create!, вызывают все необходимые колбэки Discourse (индексирование поиска, обновления кэша Redis, задачи Sidekiq, маршрутизацию и т. д.)? Или я случайно обошёл какую-то важную внутреннюю логику, которая может сломать будущую миграцию схемы?
Спасибо за то, что удовлетворили моё любопытство!