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

新手上路,请多包涵

我想查看给定 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 许可协议

阅读 841
2 个回答

当我最后一次尝试这样做时,没有正式的方法可以做到这一点。我求助于使用 find 及其朋友直接生成查询的函数。它是私有 API,因此 Rails 3 完全破坏它的风险很大,但对于调试来说,这是一个不错的解决方案。

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

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

原文由 John F. Miller 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以简单地将 to_sql() 函数与活动记录一起使用

Form.where(status:"Active").to_sql

原文由 Syamlal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进