Я бы создал модель Profile
, которая автоматически создается для любого пользователя, который посещает ваш сайт и добавляет первого фаворита, оценивает первый элемент и т. Д. Profile
должен быть сохранен в вашей базе данных, включая подходящую случайную и уникальная строка. Эта строка может быть сохранена в виде файла cookie на стороне клиента и будет использована позже для получения вашего профиля. Он должен быть случайным и достаточно длинным, чтобы вы не могли легко подделать свой файл cookie и получить профили других анонимных людей, но этого нельзя полностью избежать (так что будьте осторожны, вы не храните конфиденциальные данные в анонимных профилях!).
После регистрации пользователя вы можете связать его Profile
с его новой записью User
и удалить cookie и уникальный строковый идентификатор. Теперь вы можете просто получить их профили при входе в систему на основе их записи User
.
Модель Profile
может содержать любую информацию, которую вы хотите сохранить.
Если вы хотите провести различие между зарегистрированными и анонимными пользователями, вы можете создать модель AnonymousProfile
и модель Profile
(каждая с различными атрибутами) и просто скопировать все данные из анонимного профиля в профиль пользователя. когда кто-то регистрируется.
Обновление:
Во всем приложении вы можете решить использовать эту информацию только тогда, когда пользователь вошел в систему. Вы можете определить before_filter
, который захватывает текущего пользователя, и только при наличии фактического пользователя, вошедшего в систему, вы используете данные профиля:
class ApplicationController < ActionController::Base
before_filter :fetch_user_data
def fetch_user_data
@current_user = ... # Work your magic to get current user
end
private
def current_profile
@current_user and @current_user.profile # Use profile association
end
end
Где-то в действии контроллера:
if current_profile
# Do stuff with current_profile
# Only available to registered users...
end
Позже вы можете изменить реализацию current_profile
, если передумаете и хотите, чтобы анонимные профили имели эффект для ваших анонимных пользователей.