2010-05-29 78 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

相关问题