2011-02-28 1 views
2

Est-ce une pratique courante de faire un filtre comme ceci:before_filter pour définir la variable d'instance commune (Ruby On Rails)

before_filter :get_clients, :only => [:new, :edit, :create, :update] 
... 
def get_clients 
     @clients = Client.accessible_by(current_ability) 
end 

Ma forme a besoin d'accéder à @clients, donc la configuration que je les @clients variables avec avant le filtre au lieu de le faire dans toutes les méthodes. Est-ce que ça a du sens?

+0

Il est commun, sec et propre (même si apparemment pas reposant). – apneadiving

Répondre

5

Je recommande la construction d'une aide memoized à la place:

def current_clients 
    @current_clients ||= Client.accessible_by(current_ability) 
end 
helper :current_clients 

Cela fonctionne aussi bien comme avant-filtre, mais ne sera pas exécuté à moins que vous devez charger réellement la liste des clients pour une forme/vue. Vous obtenez un chargement paresseux de cette ressource. La responsabilité de savoir comment charger la liste des clients incombe toujours au contrôleur.

+0

Juste essayé la suggestion, le problème est current_ability seulement semble être disponible à partir du contrôleur. (J'utilise cancan) –

+0

Le bloc de code que je collais devrait aller dans le contrôleur. Vous n'êtes pas en mesure d'accéder à vos assistants can-can là-bas? – Winfield

+0

Ah ok, ça a du sens –

Questions connexes