【问题标题】:Delete all in rails console在 Rails 控制台中删除所有内容
【发布时间】:2013-07-18 14:47:29
【问题描述】:

我有一个用户关联为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控制台中使用单个命令删除用户代理。

【问题讨论】:

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


    【解决方案1】:

    你最好使用destroy,因为它会通过 Rails 的所有魔法(回调等)

    user.destroy #For a single record
    user.agents.destroy_all #For a collection
    

    【讨论】:

    • 我想销毁user.agents,我尝试了`user.agents.destroy,但它给了我错误。
    • 要么是user.destroy,要么是user.agents.destroy_all。第一个作用于单个记录,第二个作用于集合
    【解决方案2】:

    您正在寻找.destroy_all 方法。它会破坏给定集合的所有记录。 所以user.agents.destroy_all 会为user.agents 返回一个空数组。

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

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

    【讨论】:

      【解决方案3】:

      这对我有用

      user.agents.find_each(&:destroy)
      

      【讨论】:

      • 我喜欢“找到每个并摧毁”的声音。 XD
      【解决方案4】:
      ActiveRecord::StaleObjectError 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多