2013-06-17 1 views
0

J'utilise actuellement une requête de la formeenregistrements Remembering renvoyés de requête DB dans Rails

@recordsfound = Model.where(...) 

Il est situé dans mon contrôleur et renvoie tous les enregistrements correspondant à la requête. J'utilise la pagination pour montrer un nombre limité d'enregistrements à la fois. Toutefois, lorsque je sélectionne pour afficher la page suivante, la requête est à nouveau exécutée. Existe-t-il un moyen de stocker les enregistrements renvoyés dans une variable autre qu'une variable d'instance et donc de ne pas exiger que la requête soit réexécutée?

Merci un gars du lot

Répondre

1

Je ne suis pas tout à fait sûr je comprends ce que vous voulez dire, mais si vous voulez la requête à exécuter une seule fois par page, même lors de visites ultérieures, vous pouvez utiliser la mise en cache de fragments. Rails va charger paresseux, puis utiliser le cache lorsqu'il atteint la requête dans la vue.

<% results.each do |result| %> 
    <% cache result do %> 
    <%= result.foo %> 
    <% end %> 
<% end %> 

Si vous avez des modèles à charge, vous devez vous assurer que vous expirez le cache quand ils sont mis à jour si nécessaire:

belongs_to :result, touch: true 

Notez que si vous êtes dans un environnement de développement de la requête fonctionne encore. Vous pouvez le modifier dans votre fichier de configuration development.rb. Si vous modifiez ce paramètre, n'oubliez pas de le rétablir. Sinon, des choses étranges se produiront et vous perdrez votre temps à essayer de comprendre pourquoi vos changements ne sont pas visibles.

config.action_controller.perform_caching = true 
+0

Est-ce que cela irait dans le contrôleur? Merci – Texas

+0

Non, cela irait à votre avis. Comme vous produisez les résultats. Rails effectuera une charge paresseuse, donc la requête ne s'exécutera que lorsque la vue sera touchée, à quel point elle utilisera le cache. – Mohamad

+0

@Texas voir mes mises à jour. – Mohamad

Questions connexes