2016-11-08 71 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。