2016-10-07 7 views
0

私は単純なダウンケースを行い、レールに重複を取り除こうとしています。データベースにも保存します。ダウンケース二重のレールを削除するデータベースを保存する

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

エラー

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

もPluckのフィル​​タクエリを見つけるために、GROUP_BYを使用し

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

てみました。

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 
関連する問題