2010-08-20 6 views
0

J'ai une requête qui tire des statistiques que je voudrais placer sur le pied de chaque page de mon application. Si naturel que je mets dans le application.rb, mais les statistiques en question ne change pas tout au long de la journée en général ...rails mise en cache pour application.rb

En gros, dans le pied de page, il dira:

Actuellement, 46 pays, 75 villes et 20 000 emplacements.

Mais je voudrais mettre en cache cette requête afin qu'elle ne ralentisse pas mon application, elle a seulement besoin de mettre à jour peut-être une fois par jour. Comment ferais-je cela?

@stat = Location.find(:all, :select => 'COUNT(locations.id) AS locations, COUNT(DISTINCT(city)) AS cities, COUNT(DISTINCT(countries.name)) AS countries', :joins => [ :places, :country ], :conditions => [ 'email IS NOT NULL' ]).first 

Répondre

0

Essayez:

@stat ||= Location.find(:all, :select => 'COUNT(locations.id) AS locations, 
           COUNT(DISTINCT(city)) AS cities, 
           COUNT(DISTINCT(countries.name)) AS countries', 
           :joins => [ :places, :country ], 
           :conditions => [ 'email IS NOT NULL' ]).first 

Après cela, infirment la variable @stat sur la base de temps, ou d'autres événements, comme celui-ci:

@stat = nil 

Vous pouvez également réaliser que par en utilisant fragment caching.

+0

En fait, j'ai essayé cela en premier, mais cela ne semble pas fonctionner entre contrôleurs, même si c'est dans le contrôleur d'application. Mais j'ai fait un fragment de cache et cela semble fonctionner. Merci! – holden