2013-08-26 71 views
1

我想按检索日期检索最后五篇文章,但我想按照时间顺序(升序)显示它们。我该怎么做呢?Rails:重新排序ActiveRecord结果集

# controller 
@recent_articles = Article.where("reviewed = ?", true).order("review_date DESC").limit(5) 

# view 
<% @recent_articles.each do |ra| %> 
    # articles sorted by review_date in ascending order 
<% end %> 

我试图在控制器这样做,但它检索五个最古老review_dates代替(即它只是检索由ASC为了记录而不是重新排序已经获取的阵列):

@recent_articles = Article.where("reviewed = ?", true).order("review_date DESC").limit(5) 
@recent_articles = @recent_articles.reorder("review_date ASC") 

回答

3

我建议你在模型中创建一个reviewedrecent范围。这将允许在你的控制器很好链能范围:

# article.rb 

scope :reviewed, lambda { where("reviewed = ?", true) } 
scope :recent, lambda { |n| order("review_date").last(n) } 

# in your controller.. 

@recent_articles = Article.reviewed.recent(5) 

通知我用last(n),不limit。按review_date desc排序只是为了按照审阅日期获取最新文章,然后重新排序它们是因为查询错误。除非您因其他原因使用review_date desc,否则请改为使用last

5

所以你想从DESC查询中得到这些文章,但是它们是以相反的顺序从数据库中进来的?

@recent_articles.reverse!