簡體   English   中英

如何獲得Ruby on Rails中ActiveRecord執行的最后一個SQL查詢?

[英]How do I get the last SQL query performed by ActiveRecord in Ruby on Rails?

我在尋找類似CodeIgniter的東西:

$this->db->last_query();

http://codeigniter.com/user_guide/database/helpers.html

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

現在您可以使用以下查詢

ActiveRecord::Base.connection.last_query # => ...

可能是因為我的ActiveRecord版本比問這個問題時要新,但為了使其與ActiveRecord 3.2.3兼容,我更新了Simone Carletti的腳本:我添加了額外的屬性binds並將調用移至方法下面的alias_method_chain定義,因為否則將引發錯誤,提示它找不到方法。

ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do

  attr_reader :last_query

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

end

獲取最后一個查詢仍然是相同的:

ActiveRecord::Base.connection.last_query # => ...

您的開發日志應包括所有運行的SQL查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM