#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
У меня есть поле ip_address для всех моих таблиц, которые я хотел бы автоматически добавлять с помощью моделей. Как я мог установить это в моделях? Я предполагаю, что для этого мне придется использовать фильтр before_save?
Ответ №1:
Нет причин использовать фильтр. Столбец ip_address — это такой же столбец, как и любой другой. В зависимости от ваших намерений вы должны найти соответствующий экземпляр модели и изменить его столбец ip_address или создать новую запись, включающую columnm .
И когда вы говорите, что у вас есть столбец в каждой таблице, это плохой стиль. ip_address присваивается пользователю, а не каждой отдельной модели. Я бы посоветовал вам создать новую модель, Login
которая включает ip_address
в себя поля , user_id
и created_at
и updated_at
. Последние генерируются автоматически. Затем вы можете сохранять ip_address каждый раз, когда пользователь входит в систему. Как это в вашем контроллере:
login=Login.new
login.user=current_user
login.ip_address=request.remote_ip
login.save
Комментарии:
1. Таблицы используются анонимными пользователями (это посетители, которые не создают учетную запись). Следовательно, необходимо записывать ip_address по соображениям безопасности более чем в 1 таблице. Ваши решения кажутся довольно повторяющимися. Я хотел бы знать, возможно ли автоматически установить его в моделях — без необходимости вручную устанавливать его при обработке формы или действия.
2. Для распознавания пользователя не требуется входить в систему. Вы можете создать модель с именем
Visitor
и записать visitor_id в сеансе. Таким образом, вы можете распознавать пользователей, не позволяя им входить в систему, и вы можете связатьVisit
модель (которая имеет такие же поля, какLogin
и модель, о которой я говорил) сVisitor
моделью, чтобы вы могли видеть, когда посетитель использовал какой IP-адрес.