如何预览删除

您知道演练:在生产数据库中弹出一些无效数据,您必须清除它。 您在生产服务器上启动您的Rails控制台并键入查询:

Foo.where(bar: 'baz').all

您查看返回的数据,这是您需要删除的内容。 然后你输入:

Foo.where(bar: 'baz').destroy_all

而你的心停了一秒钟。 您只想在运行之前查看该查询。

在Rails中有没有办法做到这一点? 我正在寻找类似于的方法

Foo.where(bar: 'baz').to_sql

但是会返回DELETE查询的那个。


就在我的头顶,你可以在沙盒模式下运行控制台并运行删除查询来查看sql。 这些更改只会在退出时回滚。


问题是,destroy_all不会运行单个SQL查询。 它迭代对象的散列,实例化它们,运行它们的回调,然后调用该对象的destroy方法。 Rails没有内置的方式来产生这些查询的数组。

Cdesroisiers是正确的,你可以在沙盒模式下测试查询,但真正的问题是,即使你已经验证了任何数据的目标,你仍然在猜测你运行delete_all的决定。

如果你不愿意信任ActiveRecord来正确删除对象,那么考虑使用像Paper Trail这样的ActiveRecord版本控制宝石。


destroy_all方法与下面的一样:

Foo.where(bar: 'baz').each { |object| object.destroy }

所以sql变成了

DELETE FROM foo WHERE foo.id = your_objects_id_attribute



来自文档:

  def destroy_all(conditions = nil)
    find(:all, :conditions => conditions).each { |object| object.destroy }
  end
链接地址: http://www.djcxy.com/p/60339.html

上一篇: How to preview a delete

下一篇: Unable to get Bundling/Minification to work in VS2012