В Rails как получить фактический запрос при выполнении запроса ActiveRecord - PullRequest
4 голосов
/ 16 июля 2010

Я использую простой запрос в ActiveRecord, который делает что-то вроде этого.

MyTable.find(:all, :conditions => {:start_date => format_time(params[:date]) })

Я хочу получить эквивалентный запрос, который выполняется в фоновом режиме, возможно, с использованием оператора puts или чего-то подобного. MySQL - это моя база данных.

Ответы [ 4 ]

7 голосов
/ 16 июля 2010

Вы можете увидеть SQL-запрос, который выполняется, просмотрев журнал разработки, расположенный в log/development.log. Обратите внимание, что команда script/server по умолчанию закрывает этот файл журнала.

  • В Rails 3 вы можете добавить вызов метода .to_sql в конец искателя для вывода SQL.

  • В качестве альтернативы, Бесплатная версия RPM Lite от New Relic позволяет просматривать запросы SQL в режиме разработчика, а также много другой полезной информации о настройке производительности.

1 голос
/ 16 июля 2010

Вы можете ввести дворняга

он получает все SQL-запросы на вашем терминале

или выполнить запрос активной записи на script / console

0 голосов
/ 16 декабря 2010

Вы ищете construct_finder_sql.

>> User.send(:construct_finder_sql, {:conditions => { :username => 'joe' }})
=> "SELECT * FROM \"users\" WHERE (\"users\".\"username\" = E'joe') "

>> User.scoped(:joins => :orders, :conditions => { :username => 'joe' }).send(:construct_finder_sql, {})
=> "SELECT \"users\".* FROM \"users\"   INNER JOIN \"orders\" ON orders.user_id = users.id  WHERE (\"users\".\"username\" = E'joe') "
0 голосов
/ 16 июля 2010

В режиме разработки ваши запросы к БД выводятся на консоль сервера, вы можете локализовать запрос там.

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