我正在使用Postgresql在Ruby on Rails 4中工作,而且我遇到了一些问题。我们有一个名为AttendanceRecord
的活动记录模型,它属于AttendanceDay
,AttendanceSwipe
,Course
和CourseTimeSlot
。考勤记录在这些领域应该是独一无二的,但出现了一些问题,并且出现了重复。因此,我编写了一种方法来查找所有重复的考勤记录,并且只保留其中的一份。从活动记录关系中删除对象而不删除它
在该方法的过程中,我建立了共享相同的属性,像这样物体的活动记录关系:
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
方法的工作有点不同的比它在数组中的关系。它不是简单地从列表中删除对象,而是从数据库中删除它(没有回调)。
所以:我想知道是否有一种方法,我错过了,将从关系中删除我的to_keep
对象,而没有实际接触对象本身。然后,我将能够安全地致电records.destroy_all
,并愉快地开展我的业务。 :)
啊哈,这正是我需要的!谢谢! :D – Onikoroshi 2014-09-29 19:02:57
在rails 4中你可以做'records.where.not(id:to_keep.id).destroy_all' – trushkevich 2014-09-30 10:21:10
好点。我已经编辑了包含该选项的答案。谢谢。 – Shadwell 2014-09-30 14:34:51