Ruby通过查询等效于ActiveRecord Group

时间:2010-08-17 09:39:28

标签: ruby-on-rails ruby activerecord

我想对从ActiveRecord查询返回的数组执行操作。这是我直接在ActiveRecord上完成的功能。

Modification.find(:all, :group=>'ref_id,start_date', :order=>'updated_at desc')

以上工作正常如预期。但问题是由于某些原因我不能直接执行它。但我有一个阵列。我不能在数组上使用:group符号,原因显然不是ActiveRecord。但我想要相同的功能。像

这样的东西
modifications = Modification.all
modifications.find(:all, :group=>'ref_id,start_date').sort(:order=>&:updated_at)

上述原因不明显,但如何为数组执行类似的ActiveRecord实现。

1 个答案:

答案 0 :(得分:2)

如果您想在小组前排序:

modifications.group_by{|modification| "#{modification.ref_id}#{modification.start_date}"}.values.collect{|modification_array|
  modification_array.sort_by{|mod| mod.updated_at}.last
}

如果您想要排序:

modifications.group_by{|modification| "#{modification.ref_id}#{modification.start_date}"}.values.map(&:first).sort_by{|mod| mod.updated_at}.invert

尚未测试:)。