2010-08-17 183 views
2

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實現的數組。

回答

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 

沒有測試:)。

+0

甜,沒有意識到紅寶石有一個group_by(http://rubybrain.com/api/ruby-1.8.7/doc/index.html?a=M003084&name=group_by)。我認爲sort_by需要位於最後一個數組上,即group_by的結果,而不是單個組(或者也可以)。 – Shadwell 2010-08-17 10:17:35

+0

你是對的:)更新我的回答 – 2010-08-17 10:26:50

+0

好帥哥!非常感謝你.. – bragboy 2010-08-17 10:31:55