Если у меня есть следующее,
<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %>
<% end %>
Как ограничить его, чтобы показать только 10 последних результатов
Если у меня есть следующее,
<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %>
<% end %>
Как ограничить его, чтобы показать только 10 последних результатов
<% @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)
[1,2,3,4,5].first(3)
=> [1,2,3]
Я бы сделал это вот так:
<% @array.limit(10).each do |a| %>
Я согласен с другими (в частности, Йорг); но если вы все еще хотите знать, как ограничить сам цикл, может оказаться полезным break
.
@array.each_with_index do |feed, i|
break if i == 10;
# ...
Следующий код вернет 10 последних записей.
@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)
Созданный_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| %>