class ApplicationController < ActionController::Base
def current_user
User.find(session[:user_id])
end
end
La méthode ci-dessus récupère l'utilisateur actuellement connecté. Elle exécute find du modèle User pour le user_id de la session. la méthode est appelée plusieurs fois par requête, ce qui signifie que la base de données est également interrogée plusieurs fois par requête. Ce problème peut être résolu en mettant en cache le résultat de la base de données dans une variable d'instance.
@current_user ||= User.find(session[:user_id])
La chose importante à retenir est le symbole OR. La première fois que la ligne ci-dessus est exécutée, la variable @current_user
vaut nil
et par conséquent on interrogera la base de données. Pour tous les appels suivants de cette même méthode, @current_user
vaudra l'utilisateur actuel et la base de données ne sera pas sollicitée. Cette technique améliore les performances.
class ApplicationController < ActionController::Base
def current_user
@current_user ||= User.find(session[:user_id])
end
end
L'action mise à jour avec l'utilisation de la variable d'instance.