123 votes

Comment puis-je voir le SQL qui sera généré par une requête ActiveRecord donnée dans Ruby on Rails

Je voudrais voir la déclaration SQL qu'une requête ActiveRecord va générer. Je reconnais que je peux obtenir ces informations à partir du journal une fois la requête émise, mais je me demande s’il existe une méthode qui peut être appelée ActiveRecord Query.

Par exemple:

 SampleModel.find(:all, :select => "DISTINCT(*)", :conditions => ["`date` > #{self.date}"], :limit => 1, :order => '`date`', :group => "`date`")
 

Je voudrais ouvrir la console irb et ajouter une méthode à la fin qui montrerait le code SQL que cette requête va générer, mais pas nécessairement exécuter la requête.

191voto

gtd Points 7062

Similaire à penger, mais fonctionne à tout moment dans la console, même après que les classes ont été chargés et l’enregistreur est mis en cache :

Pour Rails 2 :

Pour Rails 3.0.x :

Pour Rails > = 3.1.0 c’est déjà fait par défaut dans les consoles. Dans le cas où il est trop bruyant et vous voulez arrêter , vous pouvez faire :

90voto

pathdependent Points 271

Bâton a mis query_object.class quelque part pour voir quel type d’objet votre travail avec, puis recherche les docs.

Par exemple, dans Rails 3.0, étendues utilisent ActiveRecord::Relation qui est une méthode de #to_sql. Par exemple :

Puis, quelque part, vous pouvez faire :

26voto

Akshat Points 25702

C’est peut-être une question ancienne mais j’utilise :

La `` méthode donnera une instruction SQL détaillée sur ce que sa va faire

13voto

penger Points 916

C’est ce que je fais habituellement pour obtenir SQL générée en console

Vous devez faire cela lorsque vous démarrez la console, si vous faites cela, après avoir tapé un code, il ne semble pas fonctionner

Ne peut pas vraiment prendre le crédit pour cela, il trouve longtemps d’un blog et ne me souviens pas de qui il est.

10voto

nitecoder Points 4561

Créer un fichier .irbrc dans votre répertoire personnel et collez ceci dans :

Qui va afficher des instructions SQL dans votre session de la CISR que vous alliez.

EDIT : Désolé, qui exécutera la requête encore, mais il est plus proche que je connaisse.

EDIT : Maintenant avec arel, vous pouvez accumuler étendues/méthodes, tant que l’objet renvoie ActiveRecord::Relation et appeler .to_sql sur elle et il sortira mettre le code sql qui va être exécuté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X