2010-05-29 6 views
60

Lorsque j'exécute des requêtes (par exemple, MyModel.where(...) ou record.associated_things) dans la console, comment puis-je voir les requêtes de base de données en cours d'exécution pour mieux comprendre ce qui se passe?Comment afficher les requêtes SQL exécutées dans la console Rails?

+0

Andrew, si vous avez besoin aussi d'exécuter des commandes dans broweser vous pouvez utiliser https://github.com/igorkasyanchuk/rails_db –

+0

Voir aussi cette réponse: http://stackoverflow.com/a/1576221/446106 – mwfearnley

Répondre

144

Entrez cette ligne dans la console:

ActiveRecord::Base.logger = Logger.new(STDOUT) 
+0

Parfait , juste ce dont j'avais besoin. Avez-vous une recommandation où aller trouver de petits trucs tels que ceux-ci sont documentés? – randombits

+2

Bien sûr. http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/ et http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick Plus http : //railscasts.com/ est toujours bon. –

+1

Cela fonctionne pour les rails 3+ mais pas 2, voir http://stackoverflow.com/a/1576221 si vous êtes toujours là :) – rogerdpack

0

requêtes ActiveRecord ad hoc dans la console ne le font pas bien. Quoi qu'il en soit à changez ce comportement?

Etes-vous sûr de cela? J'utilise la console tout le temps pour des choses comme ça. Pour l'environnement de développement, le comportement par défaut consiste à consigner les requêtes dans le fichier development.log. Êtes-vous sûr de ne pas avoir modifié votre niveau de journalisation dans votre environnement?

Voyez-vous ce qui suit dans development.rb?

config.log_level = :debug 
18

Dans Rails 3+ vous pouvez utiliser ActiveRecord :: méthode Relation to_sql:

User.where(:id => 3).to_sql 
#=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 3" 
11

Il existe une méthode .explain dans Rails 4.
(.to_sql fonctionne aussi, mais ne comprend montrer)

Category.includes(:products).explain 
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories 

EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products 

EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1 
0

A partir récemment, vous pouvez utiliser ceci:

https://github.com/dejan/rails_panel

Il se compose d'un panneau de console développeur add-on pour le chrome et le fichier de pierres précieuses qui doit être ajouté à Gemfile de votre application comme ceci:

group :development do 
    gem 'meta_request' 
end 

Ensuite, exécutez à nouveau:

bundle install 

Redémarrez votre application, ouvrez-la et lancez la console du développeur, et vous devriez la voir comme ceci: enter image description here

Questions connexes