2016-11-08 69 views
0

我有一個Rails 5應用程序。我有一個表充斥着從各種來源拉到URL數據:Rails 5 ActiveRecord Delete Duplicates

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組,留下一個並刪除重複:

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。