8
votes

Comment puis-je obtenir la dernière requête SQL interprétée par Aciverecord dans Ruby sur rails?

Je cherche quelque chose comme CodeDediciter's: xxx

( http://codeigniter.com/user_guide/database/helpers.html )


2 commentaires

Qu'essayez-vous de faire? Je ne pense pas que ce soit simple - vous devrez probablement modifier Activerecord quelque part. Je suis également préoccupé par le fait qu'une telle action brise l'abstraction (certes fuiole). Il peut y avoir un moyen meilleur et plus amical pour réaliser ce que vous voulez faire.


Je voulais enregistrer les requêtes tandis que le niveau de journalisation des rails / ActionCord est faible, de sorte que je ne verrai que des requêtes que je suis vraiment intéressée.


3 Réponses :


24
votes

AFAIK, il n'y a pas de moyen facile d'accéder à la liste des requêtes. Néanmoins, vous pouvez facilement avoir accès à ceux-ci créant un enregistreur super simple.

Si vous ouvrez la classe ActiveRecord :: ConnectionNAdapters :: abstractadapter code> Vous verrez une méthode appelée log. Cette méthode est invoquée sur chaque requête pour enregistrer la déclaration. Par défaut, il enregistre toutes les instructions avec l'enregistreur Rails. P>

Vous pouvez faire quelque chose comme p> xxx pré>

maintenant, vous pouvez obtenir la requête avec p >

ActiveRecord::Base.connection.last_query # => ...


2 commentaires

+1 pour le singe faisant une partie des rails, le roi de singe patching.


J'ai dû mettre l'appel à alias_mesthod_chain après la définition de la méthode, sinon elle a provoqué l'erreur suivante: core_ext / module / aliasing.rb: 32: Dans 'alias_method': méthode non définie "log_with_last_query" Pour la classe 'ActiveRecord :: ConnectionNAdapters :: AbstractAdapter' (NameError)



0
votes

Votre journal de développement devrait inclure toutes les requêtes SQL qui sont exécutées.


1 commentaires

Ouais, mais c'est la chose - il a toutes les questions. Je veux seulement voir ce que je me connecte explicitement.



3
votes

Probablement parce que j'ai une version plus récente d'Aciverecord que lorsque cette question a été posée, mais de l'obtenir pour travailler avec ActionCord 3.2.3 J'ai mis à jour le script de Simone Carletti: J'ai ajouté l'attribut supplémentaire liets code > et déplacé l'appel à alias_method_chain code> ci-dessous la définition de la méthode car sinon, il s'agirait d'une erreur indiquant qu'il ne peut pas trouver la méthode.

ActiveRecord::Base.connection.last_query # => ...


0 commentaires