我想查看给定 ActiveRecord 查询将生成的 SQL 语句。我承认我可以在发出查询后从日志中获取此信息,但我想知道是否有可以调用的方法和 ActiveRecord 查询。
例如:
SampleModel.find(:all, :select => "DISTINCT(*)", :conditions => ["`date` > #{self.date}"], :limit => 1, :order => '`date`', :group => "`date`")
我想打开 irb 控制台并在最后添加一个方法,该方法将显示此查询将生成的 SQL,但不一定执行查询。
原文由 rswolff 发布,翻译遵循 CC BY-SA 4.0 许可协议
当我最后一次尝试这样做时,没有正式的方法可以做到这一点。我求助于使用
find
及其朋友直接生成查询的函数。它是私有 API,因此 Rails 3 完全破坏它的风险很大,但对于调试来说,这是一个不错的解决方案。方法是
construct_finder_sql(options)
(lib/active_record/base.rb:1681
) 你必须使用send
因为它是私有的。编辑:
construct_finder_sql
在 Rails 5.1.0.beta1 中被删除。