如何显示在Rails控制台中运行的SQL查询?

当我在控制台中运行查询(例如MyModel.where(...)record.associated_things )时,如何才能看到正在运行的实际数据库查询,以便我可以更好地了解正在发生的事情?

在控制台中input以下行:

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

在Rails 3+中,你可以使用ActiveRecord :: Relation的to_sql方法:

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

在Rails 4中有一个.explain方法。
.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 

尽pipe如此,控制台中的临时ActiveRecord查询不会。 无论如何改变这种行为?

你确定吗? 我总是用这个控制台来做这个事情。 对于开发环境,默认行为是将查询logging到development.log。 你确定你没有改变你的环境中的日志级别?

你在development.rb中看到以下内容吗?

 config.log_level = :debug 

从最近开始,你可以使用这个:

https://github.com/dejan/rails_panel

它由开发者控制台面板的chrome插件以及需要添加到应用程序Gemfile中的 gem文件组成,如下所示:

 group :development do gem 'meta_request' end 

然后再次运行:

 bundle install 

重新启动你的应用程序,打开它,并启动开发者控制台,你应该看到这样的: 在这里输入图像说明