Podle vaší aktualizace navrhnu toto:Pokaždé, když smažete uživatele, který má příspěvky, a poté se pokusíte vypsat jeho příspěvky <%= post.user.name %>
vrátí nulu, protože tento příspěvek již nemá uživatele, na kterého by se mohl odkazovat. Můžete použít buď
has_many :posts, dependent: :destroy
v uživatelském modelu, jak jsem navrhl výše, nebo přidáte nějakou funkcionalitu k mazání uživatelů, abyste předešli chybám při pokusu o zobrazení jejich příspěvků. Některé možnosti jsou:
Když je uživatel smazán, můžete jednoduše smazat vše kromě jeho jména a ID v tomto řádku uživatelské tabulky, což vám umožní mít <%= post.user.name %>
vrátit hodnotu.
Když je uživatel smazán, můžete smazat vše v jeho informacích o uživatelské tabulce a přidat "-user-deleted" za to, co dělá Tumblr, když uživatel deaktivuje svůj účet a jeho jméno se objeví v příspěvku na nějakém jiném Tumblru.
Můžete vytvořit uživatele v DB s názvem "uživatel-smazán" a nechat tohoto uživatele zdědit každý příspěvek od uživatele, který je smazán. V ovladači uživatele přidejte něco do delete
akci změnit pole user_id v jejich příspěvcích na účet „smazaný uživatelem“.
Nebo nakonec můžete zkontrolovat, zda post.user vrací hodnotu, a pokud ne, stačí vytisknout něco jako "Uživatel již v systému neexistuje"
To vše samozřejmě závisí na tom, zda chcete uživatelům povolit smazání, ale přesto si ponechat jejich příspěvky. To je jistě pravděpodobný případ, pokud jde o víc než jen o třídní projekt nebo něco, co děláte jen proto, abyste se naučili Rails. Snad to pomůže. Určitě mě to přivedlo k zamyšlení nad úskalími v tom, že umožňuje uživatelům smazat své profily, aniž by po nich měli něco na úklid.