2011-01-17 9 views
2

私は最近、http://railscasts.com/episodes/228-sortable-table-columnsに従って、ソート可能なテーブルの列をアプリに追加しました。それは素晴らしい仕事でしたが、私のテーブルの列のいくつかはpost.comments.countのようなものです(明らかに投稿には多くのコメントがあります)。私はポストがテーブルにあるコメントの数で並べ替えることができるようにしたいと思いますが、私はrailscastのソリューションを使ってこれを実装する方法を理解できません。Rails 3、リンクされたモデルによる並べ替え可能なテーブル列?

答えて

4

最も簡単な方法はcounter_cacheです。

移行を使用して、テーブルpostscomments_count:integerデータベースフィールドを作成します。その列に並べ替えその後

class Comment < ActiveRecord::Base 
    belongs_to :post, :counter_cache => true 
end

その後、あなたのモデルを更新

Post.order(:comments_count)
+0

をだから、技術的に、これは特にカウントシナリオに答えるが、他のリンクされたモデルデータのための方法はありますか? – Elliot

+0

'Foo.join(:bar).order( 'bar.whatever')' –

+0

素晴らしい答え!しかし、.includesを使用するよりも、.includesを使用する方が良い方法はありませんか? – Houen

0

一つの方法は、それはあなたの例のすべてで適用されます場合は、

post.comments_count 
# instead of 
post.comments.count 

わからない

を言及していた場合、カウンタキャッシュ列になります。

関連する問題