代码之家  ›  专栏  ›  技术社区  ›  effkay

保存前从阵列中删除重复项

  •  0
  • effkay  · 技术社区  · 17 年前

        def remove_duplicates
          before = @tweets.size
          @tweets.delete_if {|tweet| !((Tweet.all :conditions => { :twitter_id => tweet.twitter_id}).empty?) }
          duplicates = before - @tweets.size
          puts "#{duplicates} duplicates found"
        end
    

    其中@tweets是从twitter获取的Tweet对象数组。我很感激任何有效的解决方案,尤其是一个可能更优雅的解决方案。。。

    4 回复  |  直到 17 年前
        1
  •  2
  •   Ben Hughes    17 年前

    你可以 validate_uniqueness_of :twitter_id

        2
  •  1
  •   Ryan McGeary    17 年前

    因为听起来像是在使用Twitter搜索API,所以更好的解决方案是使用 since_id 参数跟踪从上一次查询中获得的最后一个twitter状态id,并将其用作 自

    有关更多信息,请访问 Twitter Search API Method: search

        3
  •  0
  •   jdoe jdoe    17 年前

    array.uniq!

    从self中删除重复的元素。如果未进行任何更改(即未找到重复项),则返回nil。

        4
  •  0
  •   effkay    17 年前

    好吧,事实证明问题的性质有点不同:当仔细观察时,我发现多条tweet是用twitter_id 2147483647保存的。。。这是整数字段的上限:)

    将字段更改为bigint解决了这个问题。我花了很长时间才弄明白,因为MySQL确实在默默地失败,只是尽可能地恢复到最大值。(直到我添加了唯一索引)。我很快就在postgres上试用了它,它返回了一个很好的“整数超出范围”错误,这就为我指出了问题的真正原因。

    推荐文章