2009-11-09 2 views
0

Je suis en train de développer une application dédiée à générer des rapports statistiques, je voudrais que cet utilisateur après avoir enregistré leur rapport statistiques, ils sauvegardent les requêtes sql aussi. Pour ce faire, j'ai écrit le module suivant:Comment obtenir des requêtes SQL pour chaque utilisateur où env est la production

module SqlHunter 

    class ActiveRecord::ConnectionAdapters::AbstractAdapter 

     @@queries = [] 
     cattr_accessor :queries 
     def log_info_with_trace(sql, name, runtime) 
      return unless @logger && @logger.debug? 
      @@queries << sql 
     end 
     alias_method_chain :log_info, :trace 
    end 
end 

dans le contrôleur, j'ai écrit que

sqlfile = File.open("public/advancedStats/#{@dir_name}/advancedStatQuery.sql", 'w') 
@queries = ActiveRecord::ConnectionAdapters::AbstractAdapter::queries 
for query in @queries do 
    sqlfile.write("#{query} \n") 
end 
sqlfile.close 

J'ai aussi modifié l'environnement Rails en ajoutant cette ligne:

ActiveRecord::Base.logger.level = Logger::DEBUG 

Ce programme fonctionne et je peux obtenir toutes les requêtes, mais j'ai seulement besoin des requêtes spécifiques faites par un utilisateur pour générer un rapport statistique.

est quelqu'un a une idée, Merci,

mgatri

Répondre

1

Vous pouvez ajouter un accesseur qui dit que si vous souhaitez vous connecter ou non.

@@queries = [] 
@@loging = false 
cattr_accessor :queries, :logging 

def log_info_with_trace(sql, name, runtime) 
    return unless @logger && @logger.debug? 
    @@queries << sql if @@logging 
end 

Lorsque vous effectuez une ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true
Ensuite, vos requêtes SQL seront connecté. Lorsque vous le définissez sur false, ils ne le seront pas.

Vous ne pouvez donc les enregistrer que lorsque vous le souhaitez.

Pour effacer les anciennes requêtes, il suffit d'effacer la matrice.

ActiveRecord::ConnectionAdapters::AbstractAdapter::queries.clear 
+0

Salut Damien, Merci pour votre réponse, maintenant je peux filtrer les requêtes liées à l'action nécessaire, mais le problème que je ne peux pas effacer de vieilles requêtes. Mondher –

+0

Voir mon édition pour supprimer les "anciennes" requêtes. –

Questions connexes