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.