Usunięcie duplikatów w rake tasku

Mam w tabeli pola: user_id, entry_id i parę innych.
Chciałbym pogrupować wszystkie wiersze po (user_id, entry_id) i usunąć duplikaty, nie bardzo wiem jak się za to zabrać. W odpowiedziach na SO każdy kombinuje coś innego.

Będę wdzięczny za podpowiedź.

Na przykładzie:
id, user_id, entry_id
1,1,1
2,1,1
3,1,1
4,5,6
5,5,6
6,7,7

Chciałbym żeby zostały mi w bazie tylko rekordy:
1,1,1
4,5,6
6,7,7

Na razie doszedłem tylko do tego jak wybrać elementy do deduplikacji:
ev = EntryVote.select(‘user_id, entry_id’).group(‘user_id,entry_id’).having(‘count() > 1’)

Tak na chłopski rozum to wydaje mi się, że trzeba zrobić coś w stylu

ev.each do |x| e = EntryVote.where('user_id = ? and entry_id = ?', x.user_id, x.entry_id) #jakos usunac wszystkie z e poza pierwszym , da sie to jakos sprawnie w e.each ? end

Ok, chyba zrobiłem, nie wiem za bardzo jak to przetestować czy nie usuwa czegoś ponad to co chciałem :confused:

desc "Removes duplicated votes" task :vote_dedup => :environment do ev = EntryVote.select('user_id, entry_id').group('user_id,entry_id').having('count() > 1') ev.each do |ev| records = EntryVote.where('user_id = ? AND entry_id = ?', ev.user_id, ev.entry_id) records.each_with_index {|r,index| r.destroy if index > 0 } end end
I jescze mały updejt, chyba szybciej będzie:

desc "Removes duplicated votes" task :vote_dedup => :environment do ev = EntryVote.select('user_id, entry_id').group('user_id,entry_id').having('count() > 1') ev.each do |ev| EntryVote.where('user_id = ? AND entry_id = ?', ev.user_id, ev.entry_id).offset(1).delete_all end end