PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que recebo ActionView::Template::Error:undefined method `name' para nil:NilClass no Heroku, mas não localmente


De acordo com sua atualização, vou propor isso:toda vez que você excluir um usuário que tenha postagens e tentar listar suas postagens <%= post.user.name %> retornará nil porque este post não tem mais um usuário para se referir. Você pode tanto usar o
has_many :posts, dependent: :destroy 

no modelo User como sugeri acima, ou você adiciona alguma funcionalidade à exclusão de usuários para evitar erros ao tentar visualizar suas postagens. Algumas escolhas são:

Quando um usuário é excluído, você pode excluir tudo, menos o nome e o id dessa linha da tabela de usuários, o que permitirá que você tenha <%= post.user.name %> retornar um valor.

Quando um usuário é excluído, você pode excluir tudo nas informações da tabela de usuários e adicionar "-user-deleted" depois, como o Tumblr faz quando um usuário desativa sua conta e seu nome aparece em uma postagem em algum outro Tumblr.

Você pode criar um usuário no banco de dados chamado "excluído pelo usuário" e fazer com que esse usuário herde todas as postagens de um usuário que foi excluído. No controlador de usuário adicione algo em seu delete ação para alterar o campo user_id em suas postagens para a conta "excluída pelo usuário".

Ou, finalmente, você pode apenas verificar se post.user retorna um valor e, se não, apenas imprimir algo como "O usuário não existe mais no sistema"

Isso tudo depende, é claro, se você deseja permitir que os usuários sejam excluídos, mas ainda mantém suas postagens. Esse é certamente um caso provável se for mais do que apenas um projeto de classe ou algo que você está fazendo apenas para aprender Rails. Espero que isto ajude. Isso certamente me fez pensar nas armadilhas de permitir que os usuários excluam seus perfis sem ter algo para limpar depois deles.