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.