2013-08-26 2 views
1

Я хочу получить последние пять статей по дате обзора, но я хочу отобразить их в хронологическом порядке (по возрастанию). Как мне это сделать?Рельсы: переупорядочение набора результатов 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

Я предлагаю вам создать 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.

5

Так вам нужны статьи из запроса DESC, но в обратном порядке они поступают из базы данных?

@recent_articles.reverse!

Смежные вопросы