我们有:
<% @shops.each do |shop| %>
<li><%= shop.name %></li>
<% end %>
代码将产生50个条目的总结果(在我的情况下)。
如何将此视图限制为20?是的,只是限制它,我不想要任何分页或什么。
感谢。
答案 0 :(得分:30)
更改控制器中设置@shops
的代码,或将上述代码更改为@shops.take(20).each
。
答案 1 :(得分:18)
我强烈建议使用您的数据库来限制结果。这样做更有效率,因为您的数据库正在执行此工作(它旨在执行此操作)并且您不会检索所有结果,然后过滤它们。想象一下,如果你有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
答案 2 :(得分:10)
在ActiveRecord级别(或SQL)上只需limit
@shops = Shop.limit(20) # Rails 3+
@shops = Shop.all :limit => 10 # Rails 2+
或者使用Ruby
<% @shops[0,20].each do |shop| %>
<li><%= shop.name %></li>
<% end %>