2011-10-31 7 views
0

2つのモデル、ディスカッション、投稿があるとします。投稿はディスカッションに属します。最新の投稿の作成日をチェックすることで、オブジェクトの最新のアクティビティをチェックする、ディスカッションモデルのカスタムアクションがあります。すなわちレールでカスタムメソッドでソートまたはスコープを設定することは可能ですか?

def latest activity 
    self.posts.last.created_at || self.created_at 
end 

iは、たとえば、ディスカッションモデル内の列をではなく、この方法により、モデルのオブジェクトを注文スコープを書くことができますか?

scope :latest_activity, #what to put here? 

答えて

1

なぜ親を変更したくないのですか? Railsには、この正確なことのためのtouchという組み込みメソッドがあります。例えば:belongs_to:discussion、:touch =>:last_reply_atは返事が変更(作成/更新)されるたびに、親はそのフィールドをTime.nowタイムスタンプで更新するようにします。これの1つの利点は、どのディスカッションに最後の返事があるかを見たいときはいつでも、子供に問い合わせをしないことです。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

EDIT

これはポスト上のインスタンスのafter_createディスカッションモデルに現在の時刻とのフィールドを更新するために、フィルタを追加することです行う別の方法を見てください。

+0

私は親を変更しない理由は、単にそれが冗長であると感じて、親にそのフィールドを追加し、各投稿で更新するということだけです。これは間違っていますか? – jay

+0

これが別の解決策であることがわかります。しかし、質問によると、親にフィールドを記録しないでスコープする方法はありますか? – jay

+0

これを試してください:scope:latest_activity、includes(:posts).order( "posts.created_at DESC") – amunds

関連する問題