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