PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо получавам ActionView::Template::Error:undefined method `name' for nil:NilClass на Heroku, но не локално

Според вашата актуализация ще предложа следното:Всеки път, когато изтриете потребител, който има публикации, и след това се опитайте да посочите техните публикации <%= post.user.name %> ще върне нула, защото тази публикация вече няма потребител, към когото да се обърне. Можете да използвате или

has_many :posts, dependent: :destroy 

в потребителския модел, както предложих по-горе, или добавяте някаква функционалност към изтриването на потребители, за да предотвратите грешки, когато се опитвате да видите техните публикации. Някои възможности за избор са:

Когато даден потребител бъде изтрит, можете просто да изтриете всичко освен неговото име и идентификатор в този ред на потребителската таблица, което ще ви позволи да имате <%= post.user.name %> върне стойност.

Когато даден потребител бъде изтрит, можете да изтриете всичко в информацията за неговата таблица с потребители и да добавите „-user-deleted“ след нещо подобно на това, което прави Tumblr, когато потребител деактивира акаунта си и името му се покаже в публикация в друг Tumblr.

Можете да създадете потребител в DB, ​​наречен "user-deleted" и този потребител да наследи всяка публикация от потребител, който е изтрит. В потребителския контролер добавете нещо във вашия delete действие за промяна на полето user_id в техните публикации към акаунта „изтрит потребител“.

Или накрая можете просто да проверите дали post.user връща стойност и ако не просто да отпечатате нещо като „Потребителят вече не съществува в системата“

Това зависи, разбира се, от това дали дори искате да позволите на потребителите да бъдат изтривани, но все пак да запазите техните публикации. Това със сигурност е вероятен случай, ако това е нещо повече от класен проект или нещо, което правите само за да научите Rails. Надявам се това да помогне. Определено ме накара да се замисля за клопките в това да се позволи на потребителите да изтриват своите профили, без да има нещо, което да почиства след тях.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails 3 игнорира изключение за уникално ограничение на Postgres

  2. Heroku Postgres връзка от локално PHP приложение

  3. При INSERT към таблица INSERT данни в свързани таблици

  4. Sequelize Migration - Създаване на тригер в PostgreSQL

  5. Напишете Postgres Get или Create SQL заявка