使用group_by查找重复记录

问题描述

| 我正在尝试运行以下代码
dupe_groups = Activity.all.group_by { |e| e.non_id_attributes }.select{ |gr| gr.last.size > 1 }
      redundant_elements = dupe_groups.map { |group| group.last - [group.last.first] }.flatten
      redundant_elements.each(&:destroy)
但是,出现以下错误
Activity.find(:all).group_by { |e| e.non_id_attributes }.select{ |gr| gr.last.size > 1 }
NoMethodError: undefined method `last\' for #<Hash:0x00000107e505e8>
    from (irb):10:in `block in irb_binding\'
    from (irb):10:in `select\'
    from (irb):10
    from /usr/local/bin/irb:12:in `<main>\'
我怎样才能让这个家伙工作?     

解决方法

当您执行group_by时,您会得到一个散列,将您分组的内容表示为散列中的键,因此,当您对其进行选择时,应该执行.select {| key,values | ...},然后您可以values.size> 1 虽然,当我看这段代码时,对我来说有一种味道。您实际上想做什么?