Kar*_*tle 23 ruby loops ruby-on-rails
如果我有以下,
<% @feed.sort_by{|t| - t.created_at.to_i}.each do |feed| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如何限制它只显示最近的10个结果
Jör*_*tag 62
<% @feed.sort_by{|t| - t.created_at.to_i}.first(10).each do |feed| %>
Run Code Online (Sandbox Code Playgroud)
但是,最好将其推向像这样的模型
<% @feed.recent(10).each do |feed| %>
Run Code Online (Sandbox Code Playgroud)
而且,事实上,如果@feed
从数据库出来,我会进一步推迟它:从数据库中加载大量未分类的提要条目,然后对它们进行排序,然后将其中的大部分丢弃是没有意义的.最好让DB进行排序和过滤.
请参阅@Peer Allan关于如何执行此操作的答案ActiveRecord
.在ARel
(IOW:Rails 3)中它可能更简单,类似于
Feed.all.order('created_at DESC').take(10)
Run Code Online (Sandbox Code Playgroud)
我同意其他人(特别是Jörg); 但如果你仍然想知道如何限制循环本身,break
可能会有用.
@array.each_with_index do |feed, i|
break if i == 10;
# ...
Run Code Online (Sandbox Code Playgroud)
以下代码将返回10条最近的记录.
@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)
Run Code Online (Sandbox Code Playgroud)
created_at似乎表明您在Rails中使用ActiveRecord来设置@feed变量.如果是这种情况,您最好在SQL中完成这项工作.它更有效,更容易处理.
@feed = Feed.all(:order => 'created_at DESC', :limit => 10)
Run Code Online (Sandbox Code Playgroud)
否则,如果您真的想使用视图执行此操作,则可以使用first或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| %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41308 次 |
最近记录: |