PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego otrzymuję ActionView::Template::Error:undefined method `name' dla nil:NilClass w Heroku, ale nie lokalnie

Zgodnie z twoją aktualizacją zaproponuję to:Za każdym razem, gdy usuniesz użytkownika, który ma posty, a następnie spróbujesz wyświetlić jego posty <%= post.user.name %> zwróci zero, ponieważ ten post nie ma już użytkownika, do którego można by się odnieść. Możesz użyć

has_many :posts, dependent: :destroy 

w modelu użytkownika, jak sugerowałem powyżej, lub dodajesz funkcjonalność do usuwania użytkowników, aby zapobiec błędom podczas próby przeglądania ich postów. Niektóre opcje to:

Gdy użytkownik zostanie usunięty, możesz po prostu usunąć wszystko oprócz jego nazwy i identyfikatora w tym wierszu tabeli użytkowników, co pozwoli ci mieć <%= post.user.name %> zwrócić wartość.

Gdy użytkownik zostanie usunięty, możesz usunąć wszystko z jego informacji o tabeli użytkownika i dodać „-user-deleted” po tym, jak to robi Tumblr, gdy użytkownik dezaktywuje swoje konto, a jego nazwa pojawia się w poście na innym Tumblrze.

Możesz utworzyć użytkownika w bazie danych o nazwie „usunięty przez użytkownika” i sprawić, by ten użytkownik dziedziczył każdy post od użytkownika, który został usunięty. W kontrolerze użytkownika dodaj coś w swoim delete akcja, aby zmienić pole user_id w swoich postach na konto „usunięte przez użytkownika”.

Lub w końcu możesz po prostu sprawdzić, czy post.user zwraca wartość, a jeśli nie, po prostu wydrukować coś w stylu "Użytkownik nie istnieje już w systemie"

Wszystko zależy oczywiście od tego, czy chcesz zezwolić na usuwanie użytkowników, ale nadal zachować ich posty. Jest to z pewnością prawdopodobny przypadek, jeśli jest to coś więcej niż tylko projekt klasowy lub coś, co robisz tylko po to, by nauczyć się Railsów. Mam nadzieję że to pomoże. Z pewnością skłoniło mnie to do myślenia o pułapkach polegających na umożliwieniu użytkownikom usuwania swoich profili bez konieczności sprzątania po nich.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonaj surowe zapytanie podczas migracji - Sequelize 3.30

  2. Dlaczego funkcja górnego zakresu postgresa dla zakresu dat zwraca ograniczenie na wyłączność?

  3. Hibernate @Filter kolekcja wyliczeń

  4. Dynamiczny SQL (EXECUTE) jako warunek instrukcji IF

  5. Jak za pomocą homebrew obniżyć wersję postgresql z 10.1 do 9.6 w systemie Mac OS?