Когда ты получить текущую информацию пользователя, поместить ее в сеанс вместо того, чтобы вытаскивать ее из базы данных, что это похоже на то, что вы делаете, исправьте меня, если я неправильно понял проблему. Поэтому после того, как пользователь известен:
session[:user] = @user
Если ваши сеансы находятся в вашей базе данных, это нормально, поскольку информация пользователя не будет отправлена в браузер в cookie, иначе вы можете просто поместить идентификатор объекта пользователя в файл cookie или, возможно, в поле user_id или e-mail, но это означает, что вы должны получить пользователя по user_id или по электронной почте каждый раз, когда вам нужно весь пользовательский объект в приложении, больше SQL ...
в вашей application_controller ссылку на сеанс для пользователя
def current_user
session[:user]
end
You может выполнять другие проверки, чтобы убедиться, что пользователь зарегистрирован или присутствует, и т. д.
Надеюсь, это поможет, ваши вопросы не совсем понятны.
Что именно вы пытаетесь сделать? – Zajn
@ Zajn Я думал, что он выдавал много sql, когда я использовал 'current_user', так что я определил' @current_user = current_user' в начале каждого действия (application_controller). Я ожидал, что будет меньше sql и сделает это быстрее – MKK
Это действительно зависит от того, что такое current_user. Вы вообще не упоминаете, откуда оно взялось. Тем не менее, большинство разумных реализаций аутентификации, которые предоставляют метод current_user уже '@current_user || = some.expression.to.find.current_user', поэтому вы не добавляете ничего, кроме вызовов дополнительных методов. –