一尘不染

如何查看Ruby on Rails中给定ActiveRecord查询将生成的SQL

sql

我想查看给定ActiveRecord查询将生成的SQL语句。我知道可以在发出查询后从日志中获取此信息,但是我想知道是否存在可以在ActiveRecord
Query上调用的方法。

例如:

SampleModel.find(:all, :select => "DISTINCT(*)", :conditions => ["`date` > #{self.date}"], :limit => 1, :order => '`date`', :group => "`date`")

我想打开irb控制台并在最后添加一个方法,该方法将显示此查询将生成的SQL,但不一定执行该查询。


阅读 159

收藏
2021-03-17

共1个答案

一尘不染

上一次我尝试执行此操作时,还没有正式的方法。我求助于使用函数find及其朋友直接用于生成查询的函数。它是私有API,因此Rails
3会完全破坏它,这是一个巨大的风险,但是对于调试而言,这是一个不错的解决方案。

您必须使用construct_finder_sql(options)lib/active_record/base.rb:1681)方法,send因为它是私有的。

编辑construct_finder_sql 在Rails
5.1.0.beta1中已删除

2021-03-17