Отслеживание анонимных пользователей - PullRequest
2 голосов
/ 15 января 2011

У меня есть приложение, которое поддерживает подписки по электронной почте, опросы и формы комментариев.У меня есть модель для каждого (Subscription, SurveyResponse и Comment, соответственно).У меня также есть модель Visitor для хранения общей информации, такой как имя, адрес электронной почты, телефон и т. Д.

Мне интересно, как лучше связать модели вместе.Использование взаимно-однозначной связи между каждой моделью и моделью посетителя будет обрабатывать каждое событие отдельно.Итак, если Джон Доу оставит комментарий и опрос, он получит две записи в таблице посетителей.Я склоняюсь к этому подходу - он проще.

С другой стороны, я мог бы установить связь один-ко-многим в Visitor с уникальным ограничением для электронной почты.Тогда я мог бы попытаться привязать каждое событие к уже существующей записи, что-то вроде:

@visitor = Visitor.find_by_email(params[:email]) || Visitor.new(params)

Этот подход кажется проблематичным, поскольку я никогда не могу быть уверен, что получаю правильную запись,Что если два разных человека отправят комментарий, используя spam@example.com?Маловероятно, но возможно

Есть ли лучший способ решения этой проблемы?

Несколько уточнений:

  • Я не планирую когда-либо иметь полноценные учетные записи для постоянных посетителей сайта.

  • Проверки очень минимальны (новые подписки подтверждают, что электронное письмо передано, для комментариев требуется текст в поле комментария, но большинство полей являются необязательными)

Ответы [ 2 ]

1 голос
/ 15 января 2011

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

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

Вы можете использовать cookie для предварительного просмотраДля удобства заполните поля формы, но это не мешает кому-либо вводить противоречивую информацию на другом компьютере или в браузере.

0 голосов
/ 15 января 2011

Я предлагаю сохранить постоянный файл cookie со случайным / уникальным идентификатором на стороне клиента и использовать его для отслеживания пользователя.

Если пользователь является известным пользователем (вошел в систему), вы можете затем связатьэтот идентификатор для userId в отношении «многие к одному» (так как пользователь может войти в систему с разных компьютеров).

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