2015-03-24 7 views
1

Я разработал следующий класс 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 отображается как «#».

Мне просто интересно, сможет ли кто-нибудь помочь мне в этом. Если это так, большое спасибо!

ответ

0

Почему вы не пытаетесь использовать link_to помощник вместо href? Еще одна вещь, которая кажется не очень правильной, - это ваш метод вызова logout. Поскольку это не очевидно, как вы это называете, я бы предложил использовать method: :delete, что означает, что запрос на получение запроса на удаление выполняется javascript в Ruby on Rails.

Итак, если бы я был на вашем месте, то не было бы:

Welcome back 
<%= link_to current_user, "#" %> 

Нет <a href> и </a>.

+0

Благодарим вас за это предложение, я обязательно приму это изменение в представлении. Это первый проект, над которым я работаю с Ruby on Rails, поэтому я рад услышать все предложения, подобные этому. Я все еще довольно смущен тем, почему @current_user = nil создает странное значение, например «# <Пользователь: 0x49824f0>» –

+0

Это представление объекта пользователя в Rails. Я думаю, вы хотели бы показать имя пользователя (или адрес электронной почты). Затем вы должны указать: 'link_to current_user.name," # "' (или 'current_user.email' соответственно). –

+0

О, я понимаю, но проблема заключается не в том, как я отображаю переменную в представлении (хотя я ценю и буду реализовывать ваше предложение). Проблема заключается в значении, содержащемся в переменной после попытки установить значение «nil». Он не проходит проверку в "logged_in?" метод после того, как он установлен на nil, и я вывожу значение в разделе, на которое вы ссылались, чтобы попытаться выяснить, что находится в переменной вместо «nil», когда она не проходит проверку «nil». –

Смежные вопросы