Hola a todos,
Como autoalojador, recientemente me contagié de la “OCD digital”. Tenía algunas categorías y etiquetas eliminadas de mis primeros días de pruebas, y realmente quería recuperar esos IDs limpios de un solo dígito (como el ID de categoría 2 y el ID de etiqueta 3) en lugar de dejar huecos en mi base de datos.
Sé que la interfaz de usuario no permite hacer esto, así que entré en la consola de Rails (./launcher enter app → rails c) para reconstruir las cosas manualmente. Ahora mismo, todo parece y funciona perfectamente en el frontend, pero me pregunto si los expertos en bases de datos de aquí ven algún peligro oculto o alguna mina a largo plazo en hacer esto.
Este es el flujo de trabajo exacto y detallado que ejecuté:
1. Recreación de la categoría eliminada usando su antiguo ID con todos los atributos: En lugar de simplemente forzar un ID, proporcioné los atributos esenciales para que el registro esté completo.
Ruby
Category.create!(
id: 2,
name: "Site Feedback",
color: "0088CC",
text_color: "FFFFFF",
user_id: -1 # Usuario del sistema
)
2. Recuperación del tema original y enlazándolo como descripción de la categoría:
Ruby
Topic.with_deleted.find(1).recover!
Category.find(2).update!(topic_id: 1)
3. Limpieza del subtipo de tema (restauración al valor predeterminado original): Revisé otras categorías predeterminadas y noté que sus temas de descripción simplemente usan nil, así que lo revertí al estado de fábrica.
Ruby
Topic.find(1).update!(subtype: nil)
4. Recreación masiva de etiquetas antiguas para llenar los huecos de ID:
Ruby
Tag.create!([
{ id: 3, name: "private-school" },
{ id: 7, name: "tennis" }
])
Mi pregunta principal: Entiendo perfectamente que no hay ninguna necesidad práctica de hacer esto más que satisfacer mi propia OCD. Sin embargo, estrictamente desde un punto de vista estructural, ¿los métodos básicos de ActiveRecord como .update! y .create! activan de forma segura todas las callbacks necesarias de Discourse (indexación de búsqueda, actualizaciones de caché de Redis, trabajos de Sidekiq, enrutamiento, etc.)? ¿O accidentalmente omití alguna lógica interna crucial que podría romper una futura migración de esquema?
¡Gracias por satisfacer mi curiosidad!