我可以看到不执行保存的ActiveRecord .save调用会生成哪些SQL吗?

时间:2019-07-02 21:37:04

标签: ruby-on-rails activerecord

对于ActiveRecord查询,我可以看到生成的SQL而不实际执行它:

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

没有向数据库发送查询,但是我可以将SQL视为字符串。

对于update会生成的some_model.save SQL,是否可以做类似的事情?

我想可能找不到,我找不到!

3 个答案:

答案 0 :(得分:2)

@jrochkind,如果我们检查.save here的API,则它仅调用create_or_update method。因此,理想情况下,此类返回布尔值的方法将不会使用to_sql生成查询。

此外,我认为这里to_sql not working on update_attributes or .save

涵盖了类似的主题

可能还有另一种方法,例如override ActiveRecord execute method

答案 1 :(得分:1)

甚至我还没有看到任何为save生成sql的方法。

我之前也遇到过这样的情况,我发现我们可以使用sandbox的{​​{1}}模式来验证查询,一旦关闭控制台,它将回滚会话中所做的更改。

rails console

documentation

  

如果您希望在不更改任何数据的情况下测试一些代码,则可以通过调用rails console --sandbox来实现。

rails console --sandbox添加了@Rohan Daxini.to_sql上不可用的原因

答案 2 :(得分:-1)

在事务内保存,最后回滚 例如。

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