PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum erhalte ich ActionView::Template::Error:undefined method `name' for nil:NilClass auf Heroku, aber nicht lokal

Gemäß Ihrem Update werde ich Folgendes vorschlagen:Jedes Mal, wenn Sie einen Benutzer löschen, der Beiträge hat, und dann versuchen, seine Beiträge <%= post.user.name %> aufzulisten wird nil zurückgeben, da dieser Beitrag keinen Benutzer mehr hat, auf den er verweisen kann. Sie können entweder das

verwenden
has_many :posts, dependent: :destroy 

im Benutzermodell, wie ich oben vorgeschlagen habe, oder Sie fügen einige Funktionen zum Löschen von Benutzern hinzu, um Fehler zu vermeiden, wenn Sie versuchen, ihre Beiträge anzuzeigen. Einige Auswahlmöglichkeiten sind:

Wenn ein Benutzer gelöscht wird, können Sie einfach alles außer seinem Namen und seiner ID in dieser Zeile der Benutzertabelle löschen, wodurch Sie <%= post.user.name %> haben einen Wert zurückgeben.

Wenn ein Benutzer gelöscht wird, können Sie alles in seinen Benutzertabelleninformationen löschen und "-user-deleted" danach hinzufügen, ähnlich wie Tumblr es tut, wenn ein Benutzer sein Konto deaktiviert und sein Name in einem Beitrag auf einem anderen Tumblr erscheint.

Sie können einen Benutzer in der Datenbank mit dem Namen "user-deleted" erstellen und diesen Benutzer jeden Beitrag eines gelöschten Benutzers erben lassen. Fügen Sie in der Benutzersteuerung etwas in Ihrem delete hinzu Aktion, um das Feld "user_id" in ihren Beiträgen in das Konto "vom Benutzer gelöscht" zu ändern.

Oder schließlich könnten Sie einfach überprüfen, ob post.user einen Wert zurückgibt, und wenn nicht, einfach so etwas wie "Der Benutzer existiert nicht mehr im System"

ausgeben

Dies alles hängt natürlich davon ab, ob Sie überhaupt zulassen möchten, dass Benutzer gelöscht werden, aber ihre Beiträge behalten. Das ist sicherlich ein wahrscheinlicher Fall, wenn dies mehr als nur ein Klassenprojekt ist oder etwas, das Sie nur tun, um Rails zu lernen. Hoffe das hilft. Es hat mich sicherlich dazu gebracht, über die Fallstricke nachzudenken, wenn es Benutzern erlaubt wird, ihre Profile zu löschen, ohne dass etwas vorhanden ist, um nach ihnen aufzuräumen.