2009-07-23 11 views
1

私のやりたいことは、私のモデルから最新のものを取り出して、 アトリビュート "updated_at"で並べ替えられたもの(新鮮なものが最初です)です。 ルビ配列をソートするには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

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

2

簡潔ではなく、読みやすいものの、少しDRYerです。私はwepposの答えよりも優れていると自分自身を説得することはできません。私は "Class.find:all"を単に "Class.all"に置き換えるのが好きです。

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