6

投稿を表示して、いくつかの基準で並べ替えることができるようにしたいと思います。最初は投稿の投票数で、次に投稿が作成された日付で並べ替えます。1週間以上前の投稿を表示したくないので、先週の投稿のみを表示します。私はこれをやってみました:

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

しかし、それは私にNilClassと2の比較のエラーを与えました失敗しました

投票数で投稿を並べ替えるだけでコードが機能することはわかっていますが、時間を制限したいので、誰かがこれを行う方法を教えてもらえますか。私はまだ新しいので、単純さのために申し訳ありません。

4

2 に答える 2

9

@Salilによる解決策は問題ありませんが、counter_cache列(http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)を追加し、コードを変更することをお勧めしrecent_postます(このコメントから:https ://stackoverflow.com / a / 11498634/1392074)に:

def self.recent_posts
  Post.where("created_at >= ?", 1.week.ago.utc).order("votes_count DESC, created_at DESC")
end
于 2012-07-16T08:39:21.743 に答える
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
于 2012-07-16T05:39:53.633 に答える