gpt4 book ai didi

sql - 从 Active Record Relation 中移除对象而不删除它

转载 作者:行者123 更新时间:2023-12-04 14:22:22 27 4
gpt4 key购买 nike

我在使用 Postgresql 的 Ruby on Rails 4 中工作,但遇到了一些障碍。我们有一个名为 AttendanceRecord 的 Active Record 模型,它属于 AttendanceDayAttendanceSwipeCourse类(class)时间段。考勤记录本应在这些字段上是唯一的,但出了点问题,重复项偷偷溜进来。所以,我写了一个方法来查找所有重复的考勤记录,只保留其中一个。

在该方法的过程中,我构建了共享相同属性的对象的 Active Record 关系,如下所示:

records = AttendanceRecord.where(course_id: attributes[0], course_time_slot_id: attributes[1], attendance_swipe_id: attributes[2], attendance_day_id: attributes[3])

很好的关系,对吧?

接下来,我找到了我想要保留的对象并将其命名为to_keep。然后,我尝试从关系中删除该对象,如下所示:

records.delete(to_keep)

不幸的是,我发现 delete 方法在关系上的工作方式与在数组上的工作方式略有不同。它不是简单地从列表中删除对象,而是从数据库中实际删除它(没有回调)。

所以:我想知道是否缺少一种方法,它可以在不实际接触对象本身的情况下从 Relation 中删除我的 to_keep 对象。然后,我将能够安全地调用 records.destroy_all 并愉快地开展我的业务。 :)

最佳答案

如果你想从关系中排除一个对象,你可以通过 id 来实现。例如:

records.where('id <> ?', to_keep.id).destroy_all

或者,感谢@trushkevich,您可以在 rails 4 中执行以下操作:

records.where.not(id: to_keep.id).destroy_all

这意味着 destroy_all 将在您已经确定但不包括 to_keep 记录的记录上调用。

关于sql - 从 Active Record Relation 中移除对象而不删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26106398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com