У меня есть приложение, которое поддерживает подписки по электронной почте, опросы и формы комментариев.У меня есть модель для каждого (Subscription, SurveyResponse и Comment, соответственно).У меня также есть модель Visitor для хранения общей информации, такой как имя, адрес электронной почты, телефон и т. Д.
Мне интересно, как лучше связать модели вместе.Использование взаимно-однозначной связи между каждой моделью и моделью посетителя будет обрабатывать каждое событие отдельно.Итак, если Джон Доу оставит комментарий и опрос, он получит две записи в таблице посетителей.Я склоняюсь к этому подходу - он проще.
С другой стороны, я мог бы установить связь один-ко-многим в Visitor с уникальным ограничением для электронной почты.Тогда я мог бы попытаться привязать каждое событие к уже существующей записи, что-то вроде:
@visitor = Visitor.find_by_email(params[:email]) || Visitor.new(params)
Этот подход кажется проблематичным, поскольку я никогда не могу быть уверен, что получаю правильную запись,Что если два разных человека отправят комментарий, используя spam@example.com?Маловероятно, но возможно
Есть ли лучший способ решения этой проблемы?
Несколько уточнений:
Я не планирую когда-либо иметь полноценные учетные записи для постоянных посетителей сайта.
Проверки очень минимальны (новые подписки подтверждают, что электронное письмо передано, для комментариев требуется текст в поле комментария, но большинство полей являются необязательными)