Hallo zusammen,
als Self-Hoster bin ich kürzlich von der „digitalen OCD“ befallen. Ich hatte einige Kategorien und Tags aus meinen frühen Testphasen gelöscht und wollte die sauberen, einstelligen IDs (wie Kategorie-ID 2 und Tag-ID 3) unbedingt zurückgewinnen, anstatt Lücken in meiner Datenbank zu hinterlassen.
Ich weiß, dass die UI dies nicht unterstützt, also bin ich in die Rails-Konsole (./launcher enter app → rails c) gegangen, um die Dinge manuell wiederherzustellen. Alles sieht und funktioniert derzeit perfekt auf der Frontend-Seite, aber ich bin neugierig, ob die Datenbank-Experten hier versteckte Gefahren oder langfristige Zeitbomben darin sehen, dies so zu tun.
Hier ist der genaue, detaillierte Workflow, den ich ausgeführt habe:
1. Neu erstellen der gelöschten Kategorie mit ihrer alten ID und allen Attributen: Anstatt nur eine ID zu erzwingen, habe ich die wesentlichen Attribute bereitgestellt, damit der Datensatz vollständig ist.
Ruby
Category.create!(
id: 2,
name: "Site Feedback",
color: "0088CC",
text_color: "FFFFFF",
user_id: -1 # System user
)
2. Wiederherstellung des ursprünglichen Themas und Verknüpfung als Kategoriebeschreibung:
Ruby
Topic.with_deleted.find(1).recover!
Category.find(2).update!(topic_id: 1)
3. Bereinigung des Thementyps (Rückkehr zum Vanilla-Standard): Ich habe mir andere Standardkategorien angesehen und festgestellt, dass deren Beschreibungsthemen einfach nil verwenden, also habe ich es auf den Fabrikzustand zurückgesetzt.
Ruby
Topic.find(1).update!(subtype: nil)
4. Massen-neu erstellen alter Tags, um die ID-Lücken zu füllen:
Ruby
Tag.create!([
{ id: 3, name: "private-school" },
{ id: 7, name: "tennis" }
])
Meine Hauptfrage: Ich verstehe vollkommen, dass es außer der Befriedigung meiner eigenen OCD keinen praktischen Grund gibt, dies zu tun. Aber rein aus struktureller Sicht: Lösen die grundlegenden ActiveRecord-Methoden wie .update! und .create! sicher alle erforderlichen Discourse-Callbacks aus (Suchindexierung, Redis-Cache-Updates, Sidekiq-Jobs, Routing usw.)? Oder habe ich versehentlich eine entscheidende interne Logik umgangen, die eine zukünftige Schema-Migration brechen könnte?
Danke, dass ihr meine Neugier befriedigt!