homeASCIIcasts

1: Cacheando Com Variáveis de Instância 

(view original Railscast)

Other translations: En It Fr Es Kr Pl

Other formats:

Written by Gutem Nunes

	class ApplicationController < ActionController::Base
		def current_user
			User.find(session[:user_id])
		end
	end

O método acima retorna o usuário atualmente conectado. Ele executa um find na model User pela sessião do user_id. Este método é chamado várias vezes por requisição, o que significa que o banco de dados também é consultado várias vezes por requisição. Este problema pode ser solucionado cacheando o resultado do banco de dados em uma variável de instância.

@current_user ||= User.find(session[:user_id])

Uma coisa importante a ser notada é o símbolo OR. A primeira vez que a linha acima é chamada, a variável @current_user será nil e então uma consulta ao banco de daos será feita. Para todas as chamadas posteriores ao mesmo método, @current_user amarzenará o usuário atual então a consulta ao banco de dados não será feita. Isto irá melhorar a perfomance.

class ApplicationController < ActionController::Base def current_user @current_user ||= User.find(session[:user_id]) end end

A ação atualizada usando a variável de instância.