我想按审核日期检索最后五篇文章,但我想按时间顺序(升序)显示它们。我该怎么做?
# 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")
答案 0 :(得分:5)
所以你想要来自DESC查询的文章,但是它们是以相反的顺序从数据库进来的吗?
@recent_articles.reverse!
答案 1 :(得分:3)
我建议您在模型中创建reviewed
和recent
范围。这将允许您的控制器中具有良好可链接的范围:
# 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
。