删除关联后如何保存活动记录对象?
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
我有一个名为 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