PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché ottengo ActionView::Template::Error:metodo non definito `name' per nil:NilClass su Heroku ma non localmente

In base al tuo aggiornamento proporrò questo:ogni volta che elimini un utente che ha dei post e poi provi a elencare i suoi post <%= post.user.name %> restituirà zero perché questo post non ha più un utente a cui fare riferimento. Puoi utilizzare il

has_many :posts, dependent: :destroy 

nel modello Utente come ho suggerito sopra, oppure aggiungi alcune funzionalità all'eliminazione degli utenti per evitare errori durante il tentativo di visualizzare i loro post. Alcune scelte sono:

Quando un utente viene eliminato puoi semplicemente eliminare tutto tranne il suo nome e ID in quella riga della tabella utente, che ti permetterà di avere <%= post.user.name %> restituire un valore.

Quando un utente viene eliminato, puoi eliminare tutto nelle informazioni della sua tabella Utente e aggiungere "-user-deleted" dopo che è un po' come fa Tumblr quando un utente disattiva il proprio account e il suo nome viene visualizzato in un post su un altro Tumblr.

Puoi creare un utente nel DB chiamato "utente cancellato" e fare in modo che quell'utente erediti ogni post da un utente che viene eliminato. Nel controller utente aggiungi qualcosa nel tuo delete azione per modificare il campo user_id nei loro post nell'account "eliminato dall'utente".

O infine potresti semplicemente controllare se post.user restituisce un valore e, in caso contrario, stampare semplicemente qualcosa come "L'utente non esiste più nel sistema"

Tutto ciò dipende ovviamente dal fatto che tu voglia consentire l'eliminazione degli utenti ma mantenere comunque i loro post. Questo è sicuramente un caso probabile se questo è più di un semplice progetto di classe o qualcosa che stai facendo solo per imparare Rails. Spero che sia di aiuto. Sicuramente mi ha fatto pensare alle insidie ​​nel consentire agli utenti di eliminare i propri profili senza avere qualcosa in atto per ripulirli.