Я разработал следующий класс Helper для работы с протоколированием и выводом пользователей, основанных главным образом на информации, которую я нашел в учебниках онлайн, хотя я столкнулся с ошибкой.Ruby on Rails - вход в систему и выход из нее
module SessionHelper
def login(user)
session[:user] = user.id
end
def current_user
@current_user ||= User.find_by(session[:user])
end
def logged_in?
!current_user.nil?
end
def logout
session.delete(:user)
@current_user = nil
end
end
Когда я вызываю метод «выход из системы», переменная сеанса @current_user не уничтожается. В одном представлении у меня есть следующий код.
<% if logged_in? %>
<div class="login">
Welcome back, <a href="#">@<%= @current_user %></a>!
</div>
<% end %>
Даже если мой пользователь получает логаут, все еще отображается и @current_user отображается как «#».
Мне просто интересно, сможет ли кто-нибудь помочь мне в этом. Если это так, большое спасибо!
Благодарим вас за это предложение, я обязательно приму это изменение в представлении. Это первый проект, над которым я работаю с Ruby on Rails, поэтому я рад услышать все предложения, подобные этому. Я все еще довольно смущен тем, почему @current_user = nil создает странное значение, например «# <Пользователь: 0x49824f0>» –
Это представление объекта пользователя в Rails. Я думаю, вы хотели бы показать имя пользователя (или адрес электронной почты). Затем вы должны указать: 'link_to current_user.name," # "' (или 'current_user.email' соответственно). –
О, я понимаю, но проблема заключается не в том, как я отображаю переменную в представлении (хотя я ценю и буду реализовывать ваше предложение). Проблема заключается в значении, содержащемся в переменной после попытки установить значение «nil». Он не проходит проверку в "logged_in?" метод после того, как он установлен на nil, и я вывожу значение в разделе, на которое вы ссылались, чтобы попытаться выяснить, что находится в переменной вместо «nil», когда она не проходит проверку «nil». –