PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi est-ce que j'obtiens ActionView::Template::Error:undefined method `name' pour nil:NilClass sur Heroku mais pas localement

Selon votre mise à jour, je proposerai ceci :chaque fois que vous supprimez un utilisateur qui a des publications, puis essayez de répertorier ses publications <%= post.user.name %> renverra nil car ce message n'a plus d'utilisateur auquel se référer. Vous pouvez soit utiliser le

has_many :posts, dependent: :destroy 

dans le modèle Utilisateur comme je l'ai suggéré ci-dessus, ou vous ajoutez des fonctionnalités à la suppression d'utilisateurs pour éviter les erreurs lors de la tentative d'affichage de leurs publications. Certains choix sont :

Lorsqu'un utilisateur est supprimé, vous pouvez simplement supprimer tout sauf son nom et son identifiant dans cette ligne de la table des utilisateurs, ce qui vous permettra d'avoir <%= post.user.name %> retourner une valeur.

Lorsqu'un utilisateur est supprimé, vous pouvez tout supprimer dans les informations de sa table d'utilisateurs et ajouter "-user-deleted" après, un peu comme ce que fait Tumblr lorsqu'un utilisateur désactive son compte et que son nom apparaît dans une publication sur un autre Tumblr.

Vous pouvez créer un utilisateur dans la base de données appelé "utilisateur supprimé" et faire en sorte que cet utilisateur hérite de chaque message d'un utilisateur supprimé. Dans le contrôleur utilisateur, ajoutez quelque chose dans votre delete action pour modifier le champ user_id dans leurs publications vers le compte "supprimé par l'utilisateur".

Ou enfin, vous pouvez simplement vérifier si post.user renvoie une valeur, et sinon, simplement imprimer quelque chose comme "L'utilisateur n'existe plus dans le système"

Tout dépend bien sûr si vous voulez même autoriser la suppression des utilisateurs tout en conservant leurs publications. C'est certainement un cas probable si c'est plus qu'un simple projet de classe ou quelque chose que vous faites juste pour apprendre Rails. J'espère que cela t'aides. Cela m'a certainement fait réfléchir aux pièges à autoriser les utilisateurs à supprimer leurs profils sans avoir quelque chose en place pour nettoyer après eux.