2012-02-28 4 views
2

en supposant que j'ai un filtre (qui est invoqué avant chaque action), comment puis-je passer un objet, qui est récupéré à partir de la base de données dans chaque vue? Je ne veux pas refactoriser toutes mes méthodes.GRAILS: passer un objet à chaque vue?

Pour vizualize:

I avoir un filtre qui définit un objet, par exemple:

def god = God.find(1) 

et je 100 contrôleurs, pour chacun des contrôleurs 100 méthodes, soit 100 * 100 vues. Habituellement dans l'action que vous écrivez quelque chose comme:

def index = { 
def something = Something.find(1) 
[something: something] 
} 

la question est de savoir comment puis-je passer God objet aussi bien, sans avoir à modifier le tableau de retour à

[something: something, god: god] 

Répondre

3

Vous voulez un after Interceptor tapez à votre filtre pour cela. after prend model comme argument à la fermeture, et vous pouvez ajouter dieu à ce modèle.

myFilter(controller:'*', action:'*') { 
    after = { model -> 
     def god = God.find(1) 
     model.god = god 
    } 
} 

Here's la section des documents pertinents.

+0

c'est la réponse que j'espérais, merci! – mkk

1

autre endroit où vous pouvez faire la même chose est afterInceptor. Here est la documentation pour le même. afterInterceptor est le mieux adapté lorsque vous avez une logique métier pour extraire l'objet et que vous ne souhaitez pas copier la même logique dans les filtres.

+0

ne s'applique pas je suppose, vous définissez les intercepteurs dans le contrôleur, non? – mkk

Questions connexes