Получить SQL, который будет выполнен из определенного метода или named_scope - PullRequest
1 голос
/ 10 июня 2009

Учитывая метод ActiveRecord или цепочку named_scope, есть ли способ вернуть выполненный SQL без фактического его запуска?

, например

Vote.positive.count.sql #=> "SELECT COUNT(*) FROM votes WHERE value > 0"

Есть ли встроенный способ сделать это или плагин, который предлагает эту функциональность? Если нет, то есть подсказки, где я могу начать создавать свой собственный плагин или, по крайней мере, решение для этого текущего проекта.

Приветствия

Ответы [ 2 ]

4 голосов
/ 10 июня 2009

Вы можете получить информацию из именованной области следующим образом:

Vote.positive.proxy_options

Что касается получения полного оператора SQL, ActiveRecord объединяет его, используя защищенный метод с именем construct_finder_sql.

Так что вы можете попробовать это:

Vote.positive.send(:construct_finder_sql, {})

Используемый метод отличается для вычислительных запросов:

Vote.positive.send(:construct_calculation_sql, :count, :id, {})

в обоих случаях аргумент пустого хеша может иметь такие ключи, как :conditions, :order, :limit или некоторые дополнительные параметры, которые вы можете обнаружить, изучив тела этих методов.

1 голос
/ 18 июня 2010

Это было так долго, но я подумал, что было бы полезно указать, что Rails3 будет иметь поддержку для этого в любом методе scope / finder / model, который в конечном итоге попадет в DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...