6

我希望能够显示帖子并按照几个标准对它们进行排序,首先是他们对它们的投票数量,其次是它们的创建日期。我不希望显示超过一周的帖子,因此只显示上周的帖子。我试过这样做:

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

但它给了我一个错误,将 NilClass 与 2 进行比较失败

我知道代码可以通过按投票计数对帖子进行排序,但我也想限制时间,所以有人可以告诉我如何做到这一点。我还是新手,很抱歉这么简单。

4

2 回答 2

9

Solution by @Salil is ok, but I would suggest adding counter_cache column ( http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html ) and changing recent_post code (from this comment: https://stackoverflow.com/a/11498634/1392074 ) into:

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 回答