删除所有在rails控制台中

时间:2013-07-19 10:33:54

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

我的用户关联为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 个答案:

答案 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,请在尝试再次删除之前删除您拥有的任何锁定。检查是否有其他人正在使用该系统或提交您已打开的任何表格。