Подтвердить что ты не робот

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

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

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

<% end %>

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

4b9b3361

Ответ 1

<% @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)

Ответ 3

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

<% @array.limit(10).each do |a| %>

Ответ 4

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

@array.each_with_index do |feed, i|
  break if i == 10;
  # ...

Ответ 5

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

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

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

Ответ 6

Созданный_at указывает, что вы используете 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| %>