2012-03-15 12 views
1

私はブログを持っていますが、私はいつでも最新の3つの投稿を表示するフッターやサイドバーが必要です。レイアウト上の最近の投稿を呼び出してください

これを行うにはどのような方法が最適ですか?

私はレイアウトのためにそれらを準備してするすべての単一のコントローラで@recent_postsを呼び出すことができますが、これはまったく...最善の方法のように見えるしていません...私は周りいじってきた

@recent_posts = Posts.all(:limit => 3) 

部分的には、@recent_postsを持つインスタンス変数が必要です。

答えて

2

があるかもしれません1)パフォーマンス、2)努力が必要です。どちらも簡単に対処されます。

Andrei S氏の答えによると、ApplicationControllerクラスの作業を行うメソッドを呼び出すbefore_filterを使用すると、便宜/労力の問題が緩和されます。

パフォーマンスの問題はわずかです。代わり

def most_recent_posts 
    Posts.order(created_at DESC).limit(3) 
end 

である方法のではなく、ゼロのインスタンス変数をチェックし、この

def most_recent_posts 
    @most_recent_posts ||= Posts.order(created_at DESC).limit(3) 
end 

を行います。 nilの場合、クエリを実行し、その結果をインスタンス変数に代入します。

はまた、新しいポストが

def clear_most_recent_posts! 
    @most_recent_posts = nil 
end 

のようなので、おそらく、何かを追加して、ちょうどテーブルを変更する方法(複数可)からclear_most_recent_posts!をコールされたときに更新する方法が必要になります。 before_filterは、必要なときにのみ作業を行います。

私はいくつかのより多くの雄弁rubyistはこれを行うためのよりよい方法を持って確信しているが、これはアイデアです。

1

あなたは部分的にあなたの記事を持っている部分を入れて、あなたのアプリケーションの一般的なレイアウトで、それを使用することができます。

は、あなたがあなたのインスタンス変数、レイアウト

あなただけを取得この方法でレンダリングされることあなたの部分で利用できるようになります設定したあなたのApplicationControllerbefore_filterを行うことができ、すべてのコントローラでそれらすべてをロードするには一度それを行う、それは(あなたが本当にすべてのページにそれらを必要としない場合にはだ、もちろんあなたが必要なときにそれらをロードするために、フィルタやレイアウト上の条件を設定することができます)どこでも行われます

関連する問題