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

How to save an active record object when its association has been deleted?

我有一个名为 Company 的模型以及许多协会,而且这个协会还有更多。 (依赖销毁)

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

然后我通过

销毁条目
Company.find_by(name: 'ABC').destroy

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

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

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

要明确地写这个,你可以这样做:

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