我的用户关联为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控制台中使用单个命令删除用户代理
答案 0 :(得分:20)
你最好使用destroy
因为它经历了所有Rails魔法(回调等)
user.destroy #For a single record
user.agents.destroy_all #For a collection
答案 1 :(得分:5)
您正在寻找.destroy_all
方法。它会破坏给定集合的所有记录。
所以user.agents.destroy_all
会为user.agents
返回一个空数组。
您无法使用.delete_all
,因为它是一个类方法,它会删除与给定条件匹配的记录。像这样,Agent.delete_all(condition)
。如果在没有条件的情况下使用它将从匹配的表中删除所有记录。
请记住,.destroy
方法是实例方法。它们在擦除之前实例化一个对象并执行回调。 .delete
方法是类方法,它们直接擦除对象。
答案 2 :(得分:1)
这对我有用
{{1}}
答案 3 :(得分:0)
ActiveRecord::StaleObjectError
对于Optimistic locking,请在尝试再次删除之前删除您拥有的任何锁定。检查是否有其他人正在使用该系统或提交您已打开的任何表格。