我正在寻找类似CodeIgniter的东西:
$this->db->last_query();
答案 0 :(得分: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
现在您可以使用
获取查询ActiveRecord::Base.connection.last_query # => ...
答案 1 :(得分:3)
可能是因为我有一个较新版本的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 # => ...
答案 2 :(得分:0)
您的开发日志应包括所有运行的SQL查询。