使用group_by查找欺骗记录

时间:2011-05-25 03:19:28

标签: ruby-on-rails arrays hash

我正在尝试运行以下代码:

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>'

我怎样才能让这个家伙工作?

1 个答案:

答案 0 :(得分:1)

当你做一个group_by你得到一个哈希时,你分组的东西被表示为哈希中的键,所以当你选择它时你应该这样做。选择{| key,values | ...}然后你可以使用values.size&gt; 1

虽然,当我看这段代码时,它有一股气味给我。你究竟想做什么?