принадлежит_ по умолчанию - PullRequest
0 голосов
/ 10 марта 2011

В настоящее время приложение My Rails (3) создает объекты до того, как станет известно их отношение (я сохраняю Комментарий , затем прошу пользователя войти в систему / войти, чтобы проверить этот комментарий, после чего Комментарий получает Пользователь .

Я бы хотел, чтобы каждый комментарий всегда возвращался пользователю. Чтобы избежать необходимости везде проверять на @comment.user. Обеспечение пользователя также позволяет мне validate_presence.

Я вижу два пути, оба кажутся довольно безобразными. Может быть, мне не хватает какой-либо функции Rails или ActiveRecord.

  1. В начальном или переносе создайте пользователя с идентификатором 1, назовите его анонимным и назначьте его в качестве запасного.
  2. in comment.rb проверка user_id при загрузке, если ноль, присвойте ему User.new.

Как это обычно делается?

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Как насчет добавления пользовательских записей для всех комментариев.Даже для не авторизованных пользователей.Это просто еще одна запись на анонимный комментарий.А в записях пользователей вы можете сохранить последний IP-адрес и другие данные, например, максимальное количество анонимных комментариев в день.

После входа в систему переназначьте комментарии нужному пользователю и удалите временного пользователя.Для регистрации новых пользователей обновите временные записи пользователей до проверенного состояния.

Обратите внимание, что у каждого анонимного комментария есть владелец, но пользователь не подтвержден.И состояние проверки может рассматриваться как атрибут пользователя.

Да, можно хранить данные непроверенных пользователей в сеансе.Однако сессии иногда настроены для хранения в базе данных.Таким образом, результат аналогичен хранению временных пользователей в таблице основных пользователей с точки зрения использования диска, но данные более фрагментированы.

0 голосов
/ 10 марта 2011

Может быть временно хранить нужные вещи в сеансе, а не в базе данных?Мне не нравится идея хранения частично полных записей в базе данных.Это рискованная игра с целостностью базы данных.В качестве альтернативы вы можете создать таблицу с текстовым столбцом, который будет содержать сериализованные незавершенные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...