2010-05-29 16 views
60

Quando eseguo le query (ad esempio MyModel.where(...) o record.associated_things) nella console, come posso vedere le query del database che vengono eseguite in modo da ottenere una maggiore comprensione di ciò che sta accadendo?Come mostrare le query SQL eseguite nella console di Rails?

+0

Andrew, se è necessario anche per eseguire comandi nella broweser è possibile utilizzare https://github.com/igorkasyanchuk/rails_db –

+0

Vedi anche questa risposta: http://stackoverflow.com/a/1576221/446106 – mwfearnley

risposta

144

Inserire questa linea nella console:

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

Perfetto , proprio quello di cui avevo bisogno. Hai qualche consiglio su dove andare a trovare piccoli trucchi come questi sono documentati? – randombits

+2

Sicuro. http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/ e http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick Plus http : //railscasts.com/ è sempre buono. –

+1

Questo funziona per le guide 3+ ma non 2, vedere http://stackoverflow.com/a/1576221 se ci sei ancora :) – rogerdpack

0

ad-hoc query ActiveRecord nella console non lo fanno comunque. Ad ogni modo a cambia questo comportamento?

Ne sei sicuro? Uso sempre la console per cose come questa. Per l'ambiente di sviluppo, il comportamento predefinito è registrare le query su development.log. Sei sicuro di non aver cambiato il tuo livello di registro nel tuo ambiente?

Vedete quanto segue in development.rb?

config.log_level = :debug 
18

In Rails 3+ è possibile utilizzare il metodo di to_sql ActiveRecord :: Relation:

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

esiste un metodo .explain in Rails 4.
(.to_sql lavora troppo, ma non mostrerà comprende)

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

Come da recente, è possibile utilizzare questo:

https://github.com/dejan/rails_panel

Si compone di pannello della console sviluppatore add-on per Chrome, e il file gemma che deve essere aggiunto alla dell'applicazione Gemfile come questo:

group :development do 
    gem 'meta_request' 
end 

Poi eseguire di nuovo:

Riavviare l'applicazione, aprirla e avviare la console per sviluppatori, e dovrebbe essere visualizzata in questo modo: enter image description here

Problemi correlati