2010-05-29 77 views
60

當我在控制檯中運行查詢(例如MyModel.where(...)record.associated_things)時,如何才能看到正在運行的實際數據庫查詢,以便我可以更好地瞭解正在發生的事情?如何顯示在Rails控制檯中運行的SQL查詢?

+0

安德魯,如果你也需要運行broweser命令,你可以使用https://github.com/igorkasyanchuk/rails_db – 2015-10-16 16:40:06

+0

也看到這個答案:http://stackoverflow.com/a/1576221/446106 – mwfearnley 2016-10-05 15:29:57

回答

144

在控制檯上輸入這行:

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

完美,正是我需要的。有任何建議去哪裏尋找這些小技巧是有記錄的? – randombits 2010-05-29 18:18:59

+2

當然。 http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/和http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick Plus http ://railscasts.com/總是很好。 – 2010-05-29 18:35:49

+1

這適用於rails 3+,但不是2,請參閱http://stackoverflow.com/a/1576221如果您還在那裏:) – rogerdpack 2016-11-21 22:39:45

0

特設的 控制檯的ActiveRecord查詢不雖然。無論如何, 改變這種行爲?

您確定嗎?我總是用這個控制檯來做這樣的事情。對於開發環境,默認行爲是將查詢記錄到development.log。你確定你沒有改變你的環境中的日誌級別嗎?

您是否在development.rb中看到以下內容?

config.log_level = :debug 
18

在Rails可以用3+的ActiveRecord ::關係的to_sql方法:

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

有Rails中的.explain方法4.
.to_sql工作過,但不會顯示包括)

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

由於從最近,您可以使用此:

https://github.com/dejan/rails_panel

它由開發者控制檯面板的添加爲Chrome,並需要被添加到應用程序的的Gemfile這樣的寶石文件:

group :development do 
    gem 'meta_request' 
end 

然後再次運行:

bundle install 

重新啓動您的應用程序,打開它並啓動開發者控制檯,您應該看到它是這樣的: enter image description here

相關問題