1

我想按评论日期检索最后五篇文章,但我想按时间顺序(升序)显示它们。我该怎么做呢?

# 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")   
4

2 回答 2

5

因此,您想要 DESC 查询中的文章,但与它们从数据库中进入的顺序相反?

@recent_articles.reverse!

于 2013-08-26T18:08:08.173 回答
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),而不是limitreview_date desc仅仅为了按评论日期获取最新文章然后重新排序是没有意义的,因为查询是错误的。除非您review_date desc出于其他原因使用,否则请last改用。

于 2013-08-26T18:15:29.147 回答