删除关联的活动记录对象后如何保存?

时间:2018-08-22 07:48:03

标签: ruby-on-rails ruby activerecord rails-console

我有一个名为Company的模型以及许多关联,而这个关联还有很多。 (带有相关的销毁)

com = Company.find_by(name: 'ABC')

然后我将条目销毁

Company.find_by(name: 'ABC').destroy

现在'com'有记录了,当我执行com.save时,该对象不会与其关联一起存储。

注意 我正在尝试调试销毁查询在哪里花费的时间(它具有数百个关联),所以我不想丢失数据,我想在调试后将其保存在控制台中。

1 个答案:

答案 0 :(得分:6)

最好的方法是将操作包装在数据库事务中。然后,您可以回滚事务以将所有数据恢复到其原始状态。

要明确地编写此代码,您可以执行以下操作:

ActiveRecord::Base.transaction do
  Company.find_by(name: 'ABC').destroy
  # Any debugging can be done here, or above
  raise ActiveRecord::Rollback
end

实际上,rails实际上提供了debugging tool for precisely this use case:您可以通过运行以下命令对数据库进行任何更改并回滚所有内容(在事务内部,如上):

rails console --sandbox