2016-10-07 45 views
0

我想要做一個簡單的downcase並刪除rails中的重複項。還保存到數據庫。downcase刪除重複的鋼軌保存數據庫

Tag.all.each do |tag| 
    tag_name = tag.name.downcase! 
    tag_name.uniq! 
    tag.save! 
end 

錯誤

NoMethodError: undefined method `uniq!' for nil:NilClass 

與勇氣

tag_name = Tag.pluck(:name) 
tag_name.each do |tag| 
    name = tag.downcase! 
    name.uniq! 
end 

錯誤

NoMethodError: undefined method `uniq!' for nil:NilClass 
+0

這不是你如何從數據庫中刪除重複項。 –

+0

你的邏輯錯誤。您不能將.uniq應用於Tag類的單個對象。您將.uniq應用於Tag類中所有對象的數組(或AR關係)。 –

回答

0

用於GROUP_BY找到過濾查詢也試過。

found_tags = Tag.all.group_by { |tag| tag.name.downcase } 
    found_tags.each do |key, val| 
    if found_tags[key].count > 1 
     tag_to_keep = val.shift 

     val.each do |t| 
     t.taggings.update_all(tag_id: tag_to_keep.id) 
     t.destroy! 
     end 

     tag_to_keep.update(name: tag_to_keep.name.downcase) 
    end 
    end