2

我正在使用Postgresql在Ruby on Rails 4中工作,而且我遇到了一些问题。我们有一个名为AttendanceRecord的活动记录模型,它属于AttendanceDay,AttendanceSwipe,CourseCourseTimeSlot。考勤记录在这些领域应该是独一无二的,但出现了一些问题,并且出现了重复。因此,我编写了一种方法来查找所有重复的考勤记录,并且只保留其中的一份。从活动记录关系中删除对象而不删除它

在该方法的过程中,我建立了共享相同的属性,像这样物体的活动记录关系:

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,并愉快地开展我的业务。 :)

回答

4

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

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

,或者由于@trushkevich,在导轨4,你可以这样做:

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

这意味着destroy_all会叫上你已经确定的记录,但不包括to_keep记录。

+0

啊哈,这正是我需要的!谢谢! :D – Onikoroshi 2014-09-29 19:02:57

+2

在rails 4中你可以做'records.where.not(id:to_keep.id).destroy_all' – trushkevich 2014-09-30 10:21:10

+0

好点。我已经编辑了包含该选项的答案。谢谢。 – Shadwell 2014-09-30 14:34:51

相关问题