仅显示上周创建的帖子

时间:2012-07-16 04:31:41

标签: ruby-on-rails ruby ruby-on-rails-3 sorting posts

我希望能够显示帖子,并按照几个条件对它们进行排序,首先是它们对它们的投票数量,第二个是它们创建日期。我不想要显示超过一周的帖子,所以只在上周发布。我试过这样做:

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

但它给了我一个NilClass与2个失败

的比较错误

我知道代码只是通过投票计数来排序,但我也想限制时间,所以有人可以告诉我如何做到这一点。我还是新人,为简单而感到抱歉。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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