sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué obtengo ActionView::Template::Error:undefined method `name' for nil:NilClass en Heroku pero no localmente?

De acuerdo con su actualización, propondré esto:cada vez que elimine un usuario que tiene publicaciones y luego intente enumerar sus publicaciones <%= post.user.name %> devolverá cero porque esta publicación ya no tiene un usuario al que referirse. Puede usar el

has_many :posts, dependent: :destroy 

en el modelo de usuario como sugerí anteriormente, o agrega alguna funcionalidad para eliminar usuarios para evitar errores al intentar ver sus publicaciones. Algunas opciones son:

Cuando se elimina un usuario, puede eliminar todo menos su nombre e identificación en esa fila de la tabla de usuarios, lo que le permitirá tener <%= post.user.name %> devolver un valor.

Cuando se elimina un usuario, puede eliminar todo en la información de su tabla de usuarios y agregar "-user-deleted" después, algo así como lo que hace Tumblr cuando un usuario desactiva su cuenta y su nombre aparece en una publicación en otro Tumblr.

Puede crear un usuario en la base de datos llamado "eliminado por el usuario" y hacer que ese usuario herede todas las publicaciones de un usuario que se eliminó. En el controlador de usuario, agregue algo en su delete acción para cambiar el campo user_id en sus publicaciones a la cuenta "eliminada por el usuario".

O, finalmente, puede comprobar si post.user devuelve un valor y, si no, simplemente imprimir algo como "El usuario ya no existe en el sistema"

Todo esto depende, por supuesto, de si desea permitir que los usuarios se eliminen pero aún así mantener sus publicaciones. Sin duda, es un caso probable si se trata de algo más que un proyecto de clase o algo que está haciendo solo para aprender Rails. Espero que esto ayude. Ciertamente me hizo pensar en las trampas de permitir que los usuarios eliminen sus perfiles sin tener algo para limpiar después de ellos.