Если у меня есть следующие,Limit каждый сделать цикл
<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %>
<% end %>
Как ограничить его только показать 10 последних результатов
Если у меня есть следующие,Limit каждый сделать цикл
<% @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)
Если я хочу использовать '@ feed' дважды: один, чтобы показать 10, другой, чтобы показать все, лучше ли мне ограничить его взглядом с помощью' recent (10) ', затем следующий обычный нормальный цикл для' @feed '. – Victor
[1,2,3,4,5].first(3)
=> [1,2,3]
Я согласен с другими (Йорг в частности); но если вы все еще хотите знать, как ограничить сам цикл, может оказаться полезным break
.
@array.each_with_index do |feed, i|
break if i == 10;
# ...
Есть гораздо лучшие методы ограничения количества отображаемых элементов, чем разрыв цикла: 'first' и' [] 'оператор работают очень хорошо в таком сценарии. –
Я не знаю о «лучше», но другие ответы, безусловно, приятнее, о чем я конкретно говорю. «Лучше» очень ситуативно; Я мог бы указать, что методы, которые вы предлагаете, создают новый массив, а мой - нет. Дело в том, что, поскольку другие ответы уже были сосредоточены на ограничении самой коллекции, я ответил только на буквальный вопрос, добавив еще один вариант: предполагая цикл по всей коллекции, как работать только в 10 раз макс. Это не решение, которое я бы выбрал, если бы меня не нажимали на время, поскольку он делает код более уродливым. – Amadan
Да, в основном это дело стиля. Но если есть прямая концепция, выражающая намерение программиста (например, 'first',' [] 'и' order (...). 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| %>
Следующий код будет возвращать 10 последних записей.
@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)
Awesome. Это позволяет вам ограничить _after_ выполнение сортировки.В моем случае я сортирую на самом большом количестве полиморфных ассоциаций. Я не могу написать запрос для него (не знаю, как!). Это хорошо работает. – mattd
Я хотел бы сделать это следующим образом:
<% @array.limit(10).each do |a| %>
Почему ты просто не сортировать первый, а затем нарежьте массив, чтобы получить первые 10? –