homeASCIIcasts

1: Cache'owanie za pomocą zmiennych instancji 

(view original Railscast)

Other translations: En It Fr Es Kr Pt

Other formats:

Written 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.