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

按查询分组的ActiveRecord的Ruby等效项

  •  2
  • bragboy  · 技术社区  · 15 年前

    我想对从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 回复  |  直到 15 年前
        1
  •  2
  •   Vlad Zloteanu    15 年前

    如果要在分组之前排序:

    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
    

    尚未测试:)。

    推荐文章