translated by Paweł Lenart
class ApplicationController < ActionController::Base
def current_user
User.find(session[:user_id])
end
end
Pokazana powyżej metoda pobiera aktualnie zalogowanego użytkownika. Przeprowadza find
na modelu User w celu znalezienia user_id
sesji. Metoda jest wywoływana kilkukrotnie w czasie żądania, co oznacza, że zapytania do bazy danych również odbywają się kilka razy. Ten problem może być rozwiązany poprzez cache’owanie wyników z bazy danych w zmiennej instancji.
@current_user ||= User.find(session[:user_id])
Rzeczą, na którą należy zwrócić uwagę jest symbol OR. Podczas pierwszego wywołania powyższego, zmienna @current_user
będzie równa nil
, więc zostanie wykonane zapytanie do bazy danych. Przy każdych kolejnych wywołaniach tej samej metody @current_user będzie zawierać aktywnego użytkownika, także zapytania do bazy danych nie będą wykonywane, a wydajność wzrośnie.
class ApplicationController < ActionController::Base
def current_user
@current_user ||= User.find(session[:user_id])
end
end
Zaktualizowana akcja z użyciem zmiennej instancji.