【问题标题】:Attempting to destroy a record in my database using the rails console尝试使用 rails 控制台销毁我的数据库中的记录
【发布时间】:2015-11-07 19:39:29
【问题描述】:

所以我正在做一些事情,最后不得不在我的数据库中转储多个测试虚拟记录。不幸的是,我一直很难弄清楚如何删除这些内容。

然后我打开我的 rails 控制台运行

Players.count

..这给了我 93 个玩家。我只有 73 名“真正的”球员。我还注意到我给他们的球员名字是测试!!!

所以我在这里运行了这个命令

player = Players.where(name: "test!!!")

并收到名为“test!!!”的 20 名玩家的名单

然后我去运行这个命令

player.each(&:destroy)

起初输出看起来非常好,看起来一切都已经处理好了。然而,在我完全沮丧地向下滚动到最后之后,我遇到了这些输出

 (0.4ms)  ROLLBACK
 ActiveRecord::RecordNotDestroyed: ActiveRecord::RecordNotDestroyed

....看了之后,我又跑了

Players.count

并且失望地看到同样的 93 名球员仍然在那里。 :(

我承认,在 ruby​​ on rails 等方面,我非常初级。所以我承认我很可能在这个中缺少一些东西,但是有人可以看一下吗?

【问题讨论】:

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


【解决方案1】:

我猜你想删除名称为 test!!! 的玩家。你需要在播放器上运行destroy_all,因为它是一个集合。

player = Players.where(name: "test!!!")
player.destroy_all

要一个一个删除,可以是player.first.destroyplayer.last.destroy

或通过id找到并删除它,Players.find(1).destroy

【讨论】:

  • 您好,感谢您的回复。我只是尝试过,但我没有得到任何结果。我基本上得到了和以前一样的回滚错误。
  • 可以分享播放器类吗?并且模型名称应该是单数,因此应该是 Player 而不是 Players,文件名应该是 player.rb
  • destroy_all 可以带一个参数作为搜索条件。因此,您可以将这两行合并为一条,作为更短的替代方案:Player.destroy_all(name: "test!!!")。 (是的,按照惯例,模型类名称是单数)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多