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

时间:2010-05-29 17:37:02

标签: ruby-on-rails activerecord

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

7 个答案:

答案 0 :(得分:203)

Rails 3 +

在控制台中输入以下行:

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

Rails 2

在控制台中输入以下行:

ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)

答案 1 :(得分:25)

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

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

答案 2 :(得分:20)

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

答案 3 :(得分:1)

我只是想让我们的生产控制台具有我在开发时习惯的相同行为,其中所有 SQL 查询都报告给控制台。

Rails.logger.level = 0

答案 4 :(得分:0)

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

https://github.com/dejan/rails_panel

它包含用于chrome的开发人员控制台面板加载项,以及需要添加到应用程序的 Gemfile 中的gem文件,如下所示:

group :development do
  gem 'meta_request'
end

然后又跑了:

bundle install

重新启动应用程序,打开它并启动开发人员控制台,您应该看到如下所示: enter image description here

答案 5 :(得分:0)

我更喜欢在config/application.rb中设置记录器级别:

config.after_initialize do
  Rails.logger.level = (ENV['LOG_LEVEL'] || Logger::INFO).to_i
end

在生产环境中,我的ENV['LOG_LEVEL']将设置为Logger::INFO的值,而在我的本地计算机上,它将设置为Logger::DEBUG

答案 6 :(得分:0)

从Rails 6开始,有一种更方便的方法:只需在控制台中添加^(\d{7}\.\d{5}).*(@[\dA-Z]+\*) ,您将看到所有SQL调用以及调用它的位置。更多信息https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs