【问题标题】:How to save an active record object when its association has been deleted?删除关联后如何保存活动记录对象?
【发布时间】:2018-08-22 07:48:02
【问题描述】:

我有一个名为 Company 的模型以及许多关联,而且它是一个包含更多关联的关联。 (带依赖销毁)

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

然后我通过

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

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

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

【问题讨论】:

  • 我不明白。您要重新创建已删除的记录吗?
  • @user 这不是调试的方式。除非您通过某些 gem 启用了软删除,否则您已经丢失了数据。下一次,在沙盒模式下打开 rails 控制台。像rails c --sandbox 一样避免这样的灾难..
  • @MarekLipka 我本地没有足够的数据,所以我想在登台服务器上调试它。所以我不想永久删除数据,只是暂时删除,直到我弄清楚是什么减慢了查询。
  • 将您的登台服务器拉入开发。很好。

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


【解决方案1】:

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

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

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

【讨论】:

  • 完美!这正是我一直在寻找的:D 谢谢伙计。
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2016-05-10
相关资源
最近更新 更多