2009-07-23 32 views
1

我想要做的就是从我的模型中获取最新的项目,然后 通过属性“updated_at”对它们进行数组排序(最新的项目)。排序ruby数组updated_at

某处是一个错误,但我不能找到它:

@results = Array.new 
    Note.find(:all, :limit => 3, :order => "created_at DESC").each do |item| 
     @results << item 
    end 

    Picture.find(:all, :limit => 3, :order => "created_at DESC").each do |item| 
    @results << item 
    end 


    @results = @results.sort_by{ |result| result.updated_at} 

回答

9

你需要做的排序比较。 `

@results = Array.new 
    Note.find(:all, :limit => 3, :order => "created_at DESC").each do |item| 
     @results << item 
    end 

    Picture.find(:all, :limit => 3, :order => "created_at DESC").each do |item| 
    @results << item 
    end 
    @results.sort!{|a,b|a.updated_at <=> b.updated_at} 

这将对@results数组进行排序。

+0

感谢您的回答! – Stefan 2009-07-23 12:35:45

8
notes = Note.find :all, :limit => 3, :order => "created_at DESC" 
pictures = Picture.find :all, :limit => 3, :order => "created_at DESC" 
@results = (notes + pictures).sort_by(&:updated_at) 
+0

感谢您的回答! – Stefan 2009-07-23 12:36:18

2

也许不是简洁或可读,但它是一个小DRYer。我无法说服自己,这比weppos的回答更好。我喜欢用“Class.all”替换“Class.find:all”。

results = [Note, Picture].inject([]) do |memo, clazz| 
    memo + clazz.all(:limit => 3, :order => "created_at DESC") 
end 
results = results.sorted_by(&:updated_at)