有没有办法在rails控制台中查看从ActiveRecord触发哪些MySQL查询?
答案 0 :(得分:49)
是的,这可以通过将rails log重定向到标准输出来实现。
在控制台提示符中写下这些:
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.connection_pool.clear_reloadable_connections!
此外,您可以将这些行放在〜/ .irbrc文件中,这样每次您不需要手动编写这两行:
require 'rubygems'
if ENV.include?('RAILS_ENV') && ENV["RAILS_ENV"] == 'development'
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.connection_pool.clear_reloadable_connections!
end
希望这会有所帮助......
答案 1 :(得分:5)
在Rails 3+中,您可以使用ActiveRecord :: Relation的to_sql
方法:
User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 3"
答案 2 :(得分:1)
为每个项目执行此操作的另一种方法受http://guides.rubyonrails.org/debugging_rails_applications.html#what-is-the-logger-questionmark启发:
您可以在environment.rb或任何环境文件中指定备用记录器:
ActiveRecord::Base.logger = Logger.new("log/active_record.log") #This outputs the mysql queries to a file named active_record.log under your project's log folder.
当然,您需要重新启动服务器以使其正常工作。