Ограничить каждый цикл до

23
задан Karl Entwistle 7 July 2010 в 02:06
поделиться

6 ответов

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

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

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

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

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

Feed.all.order('created_at DESC').take(10)
62
ответ дан Jörg W Mittag 7 July 2010 в 02:06
поделиться

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

[1,2,3,4,5].first(3)
=> [1,2,3]
20
ответ дан Bryan Ash 7 July 2010 в 02:06
поделиться

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

<% @array.limit(10).each do |a| %>
11
ответ дан alemur 7 July 2010 в 02:06
поделиться

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

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

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

6
ответ дан Sevle 7 July 2010 в 02:06
поделиться

Считается, что созданный_кат указывает на то, что вы используете 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| %> 
5
ответ дан Peer Allan 7 July 2010 в 02:06
поделиться

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

@array.each_with_index do |feed, i|
  break if i == 10;
  # ...
8
ответ дан 29 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: