2016-11-08 14 views
0

私はRails 5アプリを持っています。私は、さまざまな情報源から引かれるURLデータで埋めテーブルを持っている:私はこのテーブルから重複を削除するにはどうすればよいRails 5 ActiveRecord重複削除

id  url 
1  http://google.com 
2  http://yahoo.com 
3  http://msn.com 
4  http://google.com 
5  http://yahoo.com 
6  http://askjeeves.com 

答えて

1

あなたはURLでグループ、1のままにして削除することができ、重複:

Model.all.group_by(:url).values.each do |dup| 
    dup.pop #leave one 
    dup.each(&:destroy) #destroy other 
end 
0

//各グループ化された項目のフィールド

dups = MyModel.group(:url).having('count("url") > 1').count(:name) 

//反復することにより、すべての重複レコードやグループにそれらを探します重複を破壊する

dups.each do |key, value| 

    # Keep one and return rest of the duplicate records 

    duplicates = MyModel.where(url: key)[1..value-1] 
    puts "#{key} = #{duplicates.count}" 
    duplicates.each(&:destroy) 

end 
1

ループのないSQLソリューション:

Model.where.not(id: Model.group(:url).select("min(id)")).destroy_all 

OR

Model.where.not(id: Model.group(:url).select("min(id)")).delete_all 

これは、重複レコードのための最小限のIDを持つレコードを維持するすべての重複を削除します。