Ограничить каждый цикл до - PullRequest
23 голосов
/ 07 июля 2010

Если у меня есть следующее,

<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %> 

<% end %>

Как можно ограничить показ только 10 самых последних результатов

Ответы [ 6 ]

62 голосов
/ 07 июля 2010
<% @feed.sort_by{|t| - t.created_at.to_i}.first(10).each do |feed| %>

Тем не менее, вероятно, лучше всего внедрить это в модель, подобную этой

<% @feed.recent(10).each do |feed| %>

И, на самом деле, если @feed выйдет из базы данных, я бы нажал ее внизеще дальше: нет смысла загружать тонну несортированных записей фидов из БД, затем сортировать их и затем выбрасывать большинство из них.Лучше пусть БД выполнит сортировку и фильтрацию.

См. Ответ @Peer Allan о том, как это сделать в ActiveRecordARel (IOW: Rails 3) это, вероятно, было бы еще проще, например,

Feed.all.order('created_at DESC').take(10)
20 голосов
/ 07 июля 2010

Массив # первый (п)

[1,2,3,4,5].first(3)
=> [1,2,3]
11 голосов
/ 11 сентября 2012

Я бы сделал это так:

<% @array.limit(10).each do |a| %>
8 голосов
/ 07 июля 2010

Я согласен с другими (в частности, с Йоргом); но если вы все еще хотите знать, как ограничить сам цикл, break может быть полезным.

@array.each_with_index do |feed, i|
  break if i == 10;
  # ...
6 голосов
/ 05 марта 2012

Следующий код вернет 10 последних записей.

@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)

Ссылка на массив

5 голосов
/ 07 июля 2010

Считается, что созданный_кат указывает на то, что вы используете ActiveRecord в Rails для установки переменной @feed. Если это так, то лучше выполнить эту работу в SQL. Это гораздо эффективнее и проще в обращении.

@feed = Feed.all(:order => 'created_at DESC', :limit => 10)

В противном случае, если вы действительно хотите использовать представление для этого, вы можете использовать сначала или диапазон

<% @feed.sort_by{|t| - t.created_at.to_i}[0..9].each do |feed| %> 
<% @feed.sort_by{|t| - t.created_at.to_i}.first(10).each do |feed| %> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...