Я хотел бы увидеть инструкцию SQL, которую сгенерирует данный запрос ActiveRecord. Я понимаю, что могу получить эту информацию из журнала после того, как запрос был выпущен, но мне интересно, есть ли метод, который можно вызвать, и запрос ActiveRecord.
Например:
SampleModel.find(:all, :select => "DISTINCT(*)", :conditions => ["`date` > #{self.date}"], :limit => 1, :order => '`date`', :group => "`date`")
Я хотел бы открыть консоль irb и добавить в конец метод, который бы показывал SQL, который будет генерировать этот запрос, но не обязательно выполнять запрос.
источник
date
,: conditions => [" > # {self.date}"],: limit => 1 ,: order => 'date
',: group => "date
") .show_generated_sql и пусть это вызовет метод construct_finder_sql.show_generated_sql
будет работать с уже полученным набором данных изfind
.construct_finder_sql
действительно удаленПодобно Penger's, но работает в любое время в консоли, даже после того, как классы были загружены и регистратор был кэширован:
Для Rails 2:
Для Rails 3.0.x:
Для Rails> = 3.1.0 это уже сделано по умолчанию в консолях. Если он слишком шумный и вы хотите его выключить, вы можете:
источник
rails console
. Работает только на irb, загруженном прямо из оболочки? (или он был удален для рельсов 3?)environment.rb
..if "irb" == $0;ActiveRecord::Base.logger = Logger.new(STDOUT);end
..получил это из комментариев в http://weblog.jamisbuck.org/2007/1/8/watching-activerecord-do -it-s-thingПрилепите
puts query_object.class
куда-нибудь, чтобы увидеть, с каким типом объекта вы работаете, а затем посмотрите документацию.Например, в Rails 3.0 области видимости используют
ActiveRecord::Relation
which has#to_sql
method. Например:Тогда где-нибудь вы можете сделать:
источник
includes
родственник,Это может быть старый вопрос, но я использую:
explain
Метод даст довольно подробное заявление SQL о том , что его собираются сделатьисточник
просто используйте
to_sql
метод, и он выведет запрос sql, который будет запущен. он работает с активной записью.при этом
find
он не сработает, поэтому вам нужно будет добавить этот идентификатор вручную в запрос или запустить его, используя where.источник
Это то, что я обычно делаю, чтобы сгенерировать SQL в консоли.
Вы должны сделать это при первом запуске консоли, если вы сделаете это после того, как наберете код, похоже, это не сработает.
Не могу поверить в это, нашел это давным-давно в чьем-то блоге и не могу вспомнить, чей это.
источник
Создайте файл .irbrc в своем домашнем каталоге и вставьте его в:
Это будет выводить операторы SQL в ваш сеанс irb по мере вашего продвижения.
РЕДАКТИРОВАТЬ: Извините, что все еще будет выполнять запрос, но он самый близкий, о котором я знаю.
РЕДАКТИРОВАТЬ: Теперь с arel вы можете создавать области / методы, пока объект возвращает ActiveRecord :: Relation и вызывает на нем .to_sql, и он помещает sql, который будет выполняться.
источник
Мой типичный способ узнать, какой sql он использует, - это ввести «ошибку» в sql, после чего вы получите сообщение об ошибке, выплевываемое на обычный регистратор (и веб-экран), на котором есть рассматриваемый sql. Не нужно искать, куда идет stdout ...
источник
Попробуйте плагин show_sql . Плагин позволяет распечатать SQL без его запуска.
источник
Вы можете изменить метод журнала подключения, чтобы вызвать исключение, предотвращающее выполнение запроса.
Это полный взлом, но мне кажется, что он работает (Rails 2.2.2, MySQL):
источник
В Rails 3 вы можете добавить эту строку в config / environment / development.rb
Однако он выполнит запрос. Но половина ответила:
источник