Soddisfare la "OCD digitale" con rails c: queste operazioni dirette su ActiveRecord sono completamente sicure?

Ciao a tutti,

Da self-hoster, ultimamente ho contratto la “OCD digitale”. Avevo alcune categorie e tag eliminati dai miei primi giorni di test e volevo davvero recuperare quegli ID puliti a una sola cifra (come l’ID Categoria 2 e l’ID Tag 3), invece di lasciare dei buchi nel mio database.

So che l’interfaccia utente non supporta questa operazione, quindi sono entrato nella console Rails (./launcher enter app → rails c) per rimettere insieme le cose manualmente. Al momento, tutto sembra e funziona perfettamente sul frontend, ma sono curioso di sapere se gli esperti di database qui presenti vedono qualche pericolo nascosto o mina a lunga distanza nel fare questo.

Ecco il flusso di lavoro esatto e dettagliato che ho eseguito:

1. Ricreazione della Categoria eliminata utilizzando il suo vecchio ID con tutti gli attributi: Invece di forzare semplicemente un ID, ho fornito gli attributi essenziali in modo che il record fosse completo.

Ruby

Category.create!(
  id: 2, 
  name: "Site Feedback", 
  color: "0088CC", 
  text_color: "FFFFFF", 
  user_id: -1 # Utente di sistema
)

2. Recupero dell’argomento originale e collegamento come descrizione della categoria:

Ruby

Topic.with_deleted.find(1).recover!
Category.find(2).update!(topic_id: 1)

3. Pulizia del sottotipo dell’argomento (ripristino al valore predefinito di base): Ho controllato altre categorie predefinite e ho notato che i loro argomenti di descrizione usano semplicemente nil, quindi l’ho riportato allo stato di fabbrica.

Ruby

Topic.find(1).update!(subtype: nil)

4. Ricreazione in blocco dei vecchi tag per colmare i buchi negli ID:

Ruby

Tag.create!([
  { id: 3, name: "private-school" },
  { id: 7, name: "tennis" }
])

La mia domanda principale: Capisco perfettamente che non c’è un bisogno pratico di farlo, se non per soddisfare la mia stessa OCD. Tuttavia, strettamente da un punto di vista strutturale, i metodi base di ActiveRecord come .update! e .create! attivano in modo sicuro tutte le callback necessarie di Discourse (indicizzazione della ricerca, aggiornamenti della cache Redis, job Sidekiq, routing, ecc.)? O ho accidentalmente aggirato una logica interna cruciale che potrebbe rompere una futura migrazione dello schema?

Grazie per aver soddisfatto la mia curiosità!