Ответ 1
Измените код в контроллере, где установлен @shops
, или измените приведенный выше код на @shops.take(20).each
.
Мы имеем это:
<% @shops.each do |shop| %>
<li><%= shop.name %></li>
<% end %>
Код даст итоговый результат из 50 записей (в моем случае).
Как ограничить это представление до 20? Да, просто ограничьте это, я не хочу разбиения на страницы и что.
Спасибо.
Измените код в контроллере, где установлен @shops
, или измените приведенный выше код на @shops.take(20).each
.
Я бы предложил использовать вашу базу данных для ограничения результатов. Это намного эффективнее в том, что ваша база данных выполняет эту работу (она предназначена для этого). И вы не извлекаете все свои результаты, а затем фильтруете их. Представьте, если у вас было 1 миллион результатов, которые вы просили в своей базе данных... не очень желательно.
Вы хотите сделать:
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
~ В 4300 раз хуже!
Или даже если ваш аргумент состоит в том, что вы получили небольшое количество результатов, вот еще один тест:
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
Просто limit
он на вашем уровне ActiveRecord (или SQL)
@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 %>