如果我有以下内容,
<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %>
<% end %>
如何限制它仅显示10个最新结果
答案 0 :(得分:62)
<% @feed.sort_by{|t| - t.created_at.to_i}.first(10).each do |feed| %>
然而,最好将其推向像这样的模型
<% @feed.recent(10).each do |feed| %>
事实上,如果@feed
来自数据库,我会进一步推迟它:从数据库中加载大量未分类的订阅源条目是没有意义的,然后排序他们然后扔掉他们中的大部分。最好让DB进行排序和过滤。
请参阅@Peer Allan关于如何在ActiveRecord
中完成此操作的答案。在ARel
(IOW:Rails 3)中,它可能更简单,类似于
Feed.all.order('created_at DESC').take(10)
答案 1 :(得分:20)
[1,2,3,4,5].first(3)
=> [1,2,3]
答案 2 :(得分:11)
我会这样做:
<% @array.limit(10).each do |a| %>
答案 3 :(得分:8)
我同意其他人(特别是Jörg);但如果您仍想知道如何限制循环本身,break
可能会有用。
@array.each_with_index do |feed, i|
break if i == 10;
# ...
答案 4 :(得分:6)
以下代码将返回10条最近的记录。
@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)
答案 5 :(得分:5)
created_at似乎表明你在Rails中使用ActiveRecord来设置@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| %>