Chciałabym dodać do każdej ze stron mojej aplikacji link umożliwiający zalogowanie i wylogowanie(linki do akcji user/login, user/logout). W zależności od tego czy użytkownik jest zalogowany powinien być wyświetlony odpowiedni link. W całej aplikacji w celu sprawdzenia czy użytkownik jest zalogowany używam metody current_user z kotrolera ApplicationController. Linki umieściłem w layoucie application.rhtml w następujący sposób:
[/code]
Zamiast bezpośredniego sprawdzania obecności użytkownika w sesji w celu zachowania spójności wolałbym użyć wspomnianej wcześniej metody current_user. Czy jest jakiś sposób na wywołanie tej metody z layoutu, ewentualnie przekazanie zmiennej, która zawierała by wynik tej metody? Może ktoś ma lepszy pomysł?
wnioskuję, że w sesji trzymasz cały obiekt użytkownika. Najlepiej unikać takich rozwiązać, gdyż w momencie gdy Twój model User zmieni się (dodasz jakiś atrybut) w sesji obiekt będzie nieaktualny (niekompletny). Najlepiej trzymać tam sam id rekordu, który zwykle się nie zmienia :).
def find_user
if session[:user_id].nil?
@user = nil
... // ewentualny redirect jesli trzeba
else
@user = User.find(session[:user_id])
end
end
przed kazda uzywana metoda a w widoku używać konstrukcji : if @user …