我希望能够显示帖子,并按照几个条件对它们进行排序,首先是它们对它们的投票数量,第二个是它们创建日期。我不想要显示超过一周的帖子,所以只在上周发布。我试过这样做:
<%= render @posts.sort_by { |post| post.votes.count if post.created_at < 1.week.ago.utc }.reverse %>
但它给了我一个NilClass与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