对于ActiveRecord查询,我可以看到生成的SQL而不实际执行它:
SomeModel.where(something: "something").to_sql
没有向数据库发送查询,但是我可以将SQL视为字符串。
对于update
会生成的some_model.save
SQL,是否可以做类似的事情?
我想可能找不到,我找不到!
答案 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
如果您希望在不更改任何数据的情况下测试一些代码,则可以通过调用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