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

时间:2010-07-16 10:56:26

标签: ruby-on-rails activerecord

我在ActiveRecord中使用一个简单的查询,它执行类似的操作。

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

我想获得在后台执行的等效查询,可能使用puts语句或类似的语句。 MySQL是我的数据库。

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

您可以安装 mongrel

它可以在终端上获取所有SQL查询

或在脚本/控制台

上运行有效记录查询

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您正在寻找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') "