开发者

Limit each do loop

If I have the following,

<% @feed.sort_by{|t| - t.created_at.to_i}.each do |f开发者_运维技巧eed| %> 

<% end %>

How can limit it to only show the 10 most recent results


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

However, it's probably best to push this down into the model like this

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

And, in fact, if @feed comes out of a database, I'd push it down even further: it doesn't make sense to load a ton of unsorted feed entries out of the DB, then sort them and then throw most of them away. Better let the DB do the sorting and filtering.

See @Peer Allan's answer for how to do it in ActiveRecord. In ARel (IOW: Rails 3) it would probably be even simpler, something like

Feed.all.order('created_at DESC').take(10)


Array#first(n)

[1,2,3,4,5].first(3)
=> [1,2,3]


I'd do it like this:

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


I agree with the others (Jörg in particular); but if you still want to know how to limit the loop itself, break can be useful.

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


The following code will return 10 recent records.

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

Array Reference


The created_at seems to indicate that you are using ActiveRecord in Rails to get set the @feed variable. If that is the case you are better to do this work in SQL. Its far more efficient and easier to deal with.

@feed = Feed.all(:order => 'created_at DESC', :limit => 10)

Otherwise if you really want to use the view to do this you can use first or a range

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜