【问题标题】:Crosscheck arrays and delete from DB what is left over交叉检查数组并从数据库中删除剩余的内容
【发布时间】:2015-07-26 14:41:10
【问题描述】:

我有两个数组,一个包含来自旧数据库的信息,一个包含来自新数据库的信息。我想检查旧数据库中的内容不在新数据库中,然后将其删除。

我已经完成了 array1 - array2 并将结果放入一个数组中,但不知道如何从数据库中删除它们。我试图调用的任何枚举似乎都会中断/不像与 fixnum 一起使用。

使用在 oracle 数据库上运行的 ruby​​ 1.8.7,以防在 oracle 内部有更简单的方法(第一次使用 oracle,所以我不熟悉)。

【问题讨论】:

  • v1.8.7这个月7岁了!是时候升级了吗?

标签: arrays ruby activerecord ruby-1.8.7


【解决方案1】:

如果你使用 AR ORM,你可以这样做:

(array1 - array2).each(&:destroy)

你们可以简单地delete_all:

(array1 - array2).delete_all

根据评论编辑:

由于array1array2ids 的数组,您可以简单地将结果数组传递给Merchant.where 子句并一起删除集合:

ids_for_delete = (array1 - array2)
Merchant.find(ids_for_delete).delete_all

旁注:Ruby 版本 1.8.7 和 1.9.2 的维护已于 2014 年 7 月 31 日结束 - 考虑更新。

【讨论】:

  • 我想我应该提到,因为我不断收到“未定义的方法 `destroy' for Fixnum”,我正在尝试删除整数(例如 array1 = Merchant.find(:all).map {|m| m.id} 来获取 ID)。
  • 我得到它与 Merchant.find(ids_for_delete).delete_all 我不确定 1.8.7 在哪里......?至少我不喜欢它。感谢您为我指明正确的方向!
  • @Noahhh 我可以用工作代码更新答案(我不熟悉 Ruby 1.8.7),如果有帮助,你可以接受它
  • 完成,谢谢!我也不熟悉 1.8.7,这就是为什么我不确定自己错过了什么。
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多