限制Rails中的“每个”列表

我们有这个:

 
  • 代码将产生50个条目的总结果(在我的情况下)。

    如何将此视图限制为20? 是的,只是限制它,我不想要任何分页或什么。

    谢谢。

    更改控制器中设置了@shops的代码,或将上面的代码更改为@shops.take(20).each

    我强烈建议使用您的数据库来限制结果。 这样做更有效率,因为您的数据库正在进行工作(它旨在执行此操作)并且您不会检索所有结果,然后过滤它们。 想象一下,如果你有100万个结果,你问你的数据库……不是很理想。

    你想做的事情:

     Shop.limit(20) 

    哪个数据库在做工作而不是Ruby。

    快速基准测试(评论表仅包含487个结果!):

     ruby-1.9.2-p136 :033 > Benchmark.ms do ruby-1.9.2-p136 :034 > Comment.all.take(20) ruby-1.9.2-p136 :035?> end => 649.461030960083 ruby-1.9.2-p136 :036 > Benchmark.ms do ruby-1.9.2-p136 :037 > Comment.limit(20) ruby-1.9.2-p136 :038?> end => 0.1506805419921875 

    〜4,300倍差!

    或者即使您的论点是您返回了少量结果,这里还有另一个基准:

     ruby-1.9.2-p136 :041 > Benchmark.ms do ruby-1.9.2-p136 :042 > Comment.limit(50).take(20) ruby-1.9.2-p136 :043?> end => 410.9840393066406 ruby-1.9.2-p136 :044 > Benchmark.ms do ruby-1.9.2-p136 :045 > Comment.limit(20) ruby-1.9.2-p136 :046?> end => 0.05412101745605469 

    只需limitlimit在ActiveRecord级别(或SQL)上

     @shops = Shop.limit(20) # Rails 3+ @shops = Shop.all :limit => 10 # Rails 2+ 

    或者使用Ruby

     <% @shops[0,20].each do |shop| %> 
  • <%= shop.name %>
  • <% end %>