10

我有一个用户关联user has_many agentsagent belongs_to user在 Rails 控制台中,我试图使用不同的用户来测试特定的场景,我想要一个没有代理的用户,因此我想删除user.agents. 我试过user.agents.map(&:destroy)了,但它给出了错误ActiveRecord::StaleObjectError: Attempted to delete a stale object。我什至尝试过user.agents.delete_all,但它也不起作用。我可以在rails 控制台中使用单个命令删除用户代理吗?

4

4 回答 4

23

你最好使用destroy它,因为它经历了所有 Rails 魔法(回调等)

user.destroy #For a single record
user.agents.destroy_all #For a collection
于 2013-07-19T10:36:09.070 回答
5

你正在寻找一种.destroy_all方法。它会破坏给定集合的所有记录。因此user.agents.destroy_all,将返回一个空数组user.agents

您不可能使用.delete_all它,因为它是一个类方法,它会删除与给定条件匹配的记录。像这样,Agent.delete_all(condition)。如果在没有条件的情况下使用,它将从匹配的表中删除所有记录。

请记住,.destroy方法是实例方法。他们实例化一个对象并在擦除它之前执行回调。.delete方法是类方法,它们直接擦除对象。

于 2013-07-19T12:58:52.263 回答
1

这对我有用

user.agents.find_each(&:destroy)
于 2017-08-29T08:58:52.233 回答
-1
ActiveRecord::StaleObjectError 

用于乐观锁定,请在尝试再次删除之前删除您对它的所有锁定。检查是否有其他人在使用该系统或提交您打开的任何表格。

于 2013-07-19T10:37:26.377 回答