2013-08-26 102 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!