我正在使用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