2012-07-16 7 views
5

投稿を表示し、それらの投稿の数量と作成日時で2番目の基準でソートする必要があります。私は先週の記事だけが表示されているため、1週間以上経過している投稿は望んでいません。 先週に作成された投稿のみを表示する

<%= render @posts.sort_by { |post| post.votes.count if post.created_at < 1.week.ago.utc }.reverse %> 

が、それはそうできた私はコードは投票数によってだけソートの記事で動作します知っているが、私はまた、時間を制限したい

を失敗2でくれNilClassの比較の誤差を与えた:私はこれをやってみました誰かが私にこのことがどうやってできるか教えてくれる。私はまだ新しいので、シンプルさのために申し訳ありません。

+0

post.created_at> 1.week.ago.utcの場合は、i週以上経過していない投稿を表示することが条件と思います。 nilClassエラーは、クエリでアクセスしようとしているものがdbに存在しないことが原因です –

答えて

9

を、次のようなことを行う必要があります@SalilによってソリューションはOKですが、私はcounter_cacheカラム(http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)を追加し、(このコメントから:https://stackoverflow.com/a/11498634/1392074recent_postコードを変更することをお勧めへ:

def self.recent_posts 
    Post.where("created_at >= ?", 1.week.ago.utc).order("votes_count DESC, created_at DESC") 
end 
2

投稿を検索するコードは、[表示]ではなく[モデル]である必要があります。 レコードをフェッチしてビューに表示する代わりに、表示する必要があるレコードをフェッチすることをお勧めします。 あなたのpost.rb

def self.recent_posts 
    Post.select("p.*, COUNT(v.id) AS count").where("post.created_at >= 1.week.ago.utc").joins("p LEFT JOIN votes v on p.id=v.post_id").order("count, created_at DESC") 
end 
関連する問題