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

相關問題