Могу ли я увидеть, какой SQL вызовет вызов ActiveRecord .save без сохранения? - PullRequest
2 голосов
/ 03 июля 2019

Для запроса ActiveRecord я могу увидеть сгенерированный SQL, фактически не выполняя его:

SomeModel.where(something: "something").to_sql

В БД не было отправлено ни одного запроса, но я вижу SQL в виде строки.

Есть ли что-то подобное, что можно сделать для update SQL, который будет сгенерирован some_model.save?

Думаю, что нет, я не могу найти это!

Ответы [ 3 ]

2 голосов
/ 03 июля 2019

@ jrochkind, если мы проверяем API для .save здесь , то он просто вызывает create_or_update метод . Поэтому в идеале такие методы, возвращающие логические значения, не будут генерировать запросы, используя to_sql.

Кроме того, я думаю, что подобная тема рассматривается здесь to_sql не работает с update_attributes или .save

И, возможно, существует альтернативный подход, например переопределение метода выполнения ActiveRecord

1 голос
/ 03 июля 2019

Даже я еще не видел ни одного метода генерации sql для save.

Я также сталкивался с ситуацией ранее и обнаружил, что мы можем использовать режим sandbox rails console для проверки запросов, и это будет откат изменений, внесенных в сеанс, как только мы закроем консоль.

rails console --sandbox

Документация

Если вы хотите протестировать некоторый код без изменения каких-либо данных, вы можете сделать это, вызвав консоль rails console --sandbox.

@Rohan Daxini добавили причину, по которой .to_sql недоступен на save

0 голосов
/ 03 июля 2019

Сохранить в транзакции с откатом в конце например.

irb(main):024:0> Post.transaction do
irb(main):025:1* p=Post.create(user_id: User.first.id, text: '11', group_id: 1)
irb(main):026:1> raise ActiveRecord::Rollback
irb(main):027:1> end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...