Как я выполнял последний SQL-запрос ActiveRecord в Ruby on Rails?

Здесь мое (простое решение):

std::string Format(const char* lpszFormat, ...)
{
    // Warning : "vsnprintf" crashes with an access violation
    // exception if lpszFormat is not a "const char*" (for example, const string&)

    size_t  nSize     = 1024;
    char    *lpBuffer = (char*)malloc(nSize);

    va_list lpParams;

    while (true)
    {
        va_start(lpParams, lpszFormat);

        int nResult = vsnprintf(
            lpBuffer,
            nSize,
            lpszFormat,
            lpParams
        );

        va_end(lpParams);

        if ((nResult >= 0) && (nResult < (int)nSize) )
        {
            // Success

            lpBuffer[nResult] = '\0';
            std::string sResult(lpBuffer);

            free (lpBuffer);

            return sResult;
        }
        else
        {
            // Increase buffer

            nSize =
                  (nResult < 0)
                ? nSize *= 2
                : (nResult + 1)
            ;

            lpBuffer = (char *)realloc(lpBuffer, nSize);
        }
    }
}
7
задан Nikki Erwin Ramirez 7 July 2009 в 07:17
поделиться

2 ответа

Насколько мне известно, нет простого способа получить доступ к списку запросов. Тем не менее, вы можете легко получить к ним доступ, создав очень простой регистратор.

Если вы откроете класс 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 # => ...
24
ответ дан 6 December 2019 в 06:37
поделиться

Ваш журнал разработки должен включать все выполняемые SQL-запросы.

0
ответ дан 6 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: