2011-09-12 1 views
0

私はステータスフィードにたくさんのオブジェクトを提供しており、最新の活動に基づいてソートしたいと思っています。私は、各オブジェクトののcreated_at属性のオフにソートされた場合、私はコードを使用します。レールで並べ替えるためのカスタムメソッドを使用します。

articles = Article.all 
    documents = Document.all 
    @feeds = (articles + documents).sort! { |b, a| a.created_at <=> b.created_at } 

をしかし、の人々は、そのような文書の最新の活動は、最新でのcreated_at属性であることを文書で投稿できるとしましょう役職。

@feeds = (articles + documents).sort! { |b, a| a.latest_activity <=> b.latest_activity } 

をそして私はモデルにlatest_activity定義します:それから私は、次のような並べ替えしたい

def latest_activity 
     self.posts.last.created_at 
end 

Article.rbで

def latest_activity 
    self.created_at 
end 
Document.rbで

これは動作しません。ローカルサーバーは次のエラーを処理します。

undefined method `created_at' for nil:NilClass 

ここでどのようにソートを行うことができますか?

+1

ショット? –

+0

self.posts.last.try(:created_at) – klochner

+0

hmmmm Platinum Azure、いい仕事 - 投稿なしの書類のチェックを完全に忘れてしまった!!! – jay

答えて

1

私は通常、created_atではなく "updated_at"を使用します。次に、あなたのPostクラスに:

class Post < ActiveRecord::Base 
    belongs_to :document, :touch => true 
end 

これはポストが保存されるとき、それは文書のupdated_atの列を更新することを意味します。

その後

、簡素化します `self.posts.last`は` nil`ことで無柱結果とdark--文書で

articles = Article.all 
documents = Document.all 
@feeds = (articles + documents).sort_by(&:updated_at) 
関連する問題