Ruby on Rails - Необязательные ассоциации? - PullRequest
0 голосов
/ 19 января 2010

Я бы хотел, чтобы пользователи могли оставлять комментарии на сайте.Если они являются зарегистрированными пользователями, их имя пользователя отображается с комментарием, в противном случае разрешите им ввести имя, которое отображается вместо этого.

Я собирался создать в базе данных анонимного пользователя по умолчанию и связать каждого незарегистрированногокомментарий к этому пользователю.Будет ли лучший способ сделать это?

Любой совет приветствуется.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 января 2010

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

Как правило, лучше иметь в комментариях столбец, представляющий видимое имя пользователя, и просто показать его, если он указан, или имя зарегистрированного пользователя в противном случае. Например, ваш помощник вида может выглядеть так:

class Comment < ActiveRecord::Base
  belongs_to :user

  def user_name
    self.anonymous_name or (self.user and self.user.name) or 'Anonymous'
  end
end

Это отобразит содержимое поля anonymous_name записи Comment, или имя пользователя, если пользователь назначен, или «Anonymous» в качестве последней попытки показать что-либо.

Иногда выгодно фактически нормализовать большую часть базы данных при работе с большим количеством комментариев, чтобы вам не приходилось загружать пользовательскую таблицу через объединение просто для отображения имени. Заполнение этого поля именем пользователя, даже если оно не является анонимным, может помочь в этом, хотя это означает, что эти значения необходимо обновлять при изменении имени пользователя, предполагая, что это даже возможно.

1 голос
/ 19 января 2010

Я думаю, что вы можете сделать user_id для своей модели комментариев обнуляемым, так как вы хотите, чтобы незарегистрированные пользователи также могли добавлять комментарии. Что касается добавления имен для незарегистрированных пользователей, для этого есть два варианта

вариант 1. Добавьте столбец модели комментария и назовите его как anonymous_user, где вы будете хранить имена незарегистрированных пользователей

вариант 2. Создать еще одну модель AnonymousCommentor с атрибутами name и comment_id.

Если вы собираетесь использовать анонимных пользователей не только для комментариев в своем приложении, но и для других целей, вы можете сделать их полиморфными и использовать подходящее имя, например AnonymousUser вместо AnonymousCommentor

...