Sim*_*tti 24

AFAIK,没有简单的方法来访问查询列表.尽管如此,您可以轻松访问它们,创建一个超级简单的记录器.

如果打开该类,ActiveRecord::ConnectionAdapters::AbstractAdapter您将看到一个名为log的方法.在每个查询上调用此方法以记录该语句.默认情况下,它使用Rails记录器记录所有语句.

你可以做点什么

ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do

  attr_reader :last_query
  alias_method_chain :log, :last_query

  def log_with_last_query(sql, name, &block)
    @last_query = [sql, name]
    log_without_last_query(sql, name, &block)
  end

end
Run Code Online (Sandbox Code Playgroud)

现在您可以使用

ActiveRecord::Base.connection.last_query # => ...
Run Code Online (Sandbox Code Playgroud)

  • +1 用于猴子修补 Rails 的一部分,猴子修补之王。 (2认同)