homeASCIIcasts

1: Mise en cache des variables d'instance  (view original Railscast)

Other translations: En It

Written by Geoffrey Roguelon

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