在Rails中,如何在执行ActiveRecord查询时获取实际查询

问题描述:

我在ActiveRecord中使用了一个简单的查询,它执行类似这样的操作。在Rails中,如何在执行ActiveRecord查询时获取实际查询

MyTable.find(:all, :conditions => {:start_date => format_time(params[:date]) }) 

我想是在后台执行,也许使用puts声明或类似的东西相当于查询。 MySQL是我的数据库。

您可以通过查看位于log/development.log的开发日志查看执行的SQL查询。请注意,默认情况下,script/server命令尾随此日志文件。

  • 在Rails 3中,您可以将.to_sql方法调用附加到finder的末尾以输出SQL。

  • 或者,New Relic免费的RPM Lite gem可让您以开发人员模式查看SQL查询以及大量其他有用的性能调整信息。

+0

但它如此拥挤在日志文件中。无论如何分开它。 – bragboy 2010-07-16 11:04:35

在开发模式下,您的数据库查询将打印到服务器控制台,您可以在其中本地化查询。

可以insatll 杂种

它可以让你的所有SQL查询你的终端上

或运行的活动记录查询在脚本/控制台

您正在寻找construct_finder_sql

 
>> User.send(:construct_finder_sql, {:conditions => { :username => 'joe' }}) 
=> "SELECT * FROM \"users\" WHERE (\"users\".\"username\" = E'joe') " 

>> User.scoped(:joins => :orders, :conditions => { :username => 'joe' }).send(:construct_finder_sql, {}) 
=> "SELECT \"users\".* FROM \"users\" INNER JOIN \"orders\" ON orders.user_id = users.id WHERE (\"users\".\"username\" = E'joe') "