2010-06-22 2 views
9

Я пытаюсь ограничить количество элементов, возвращаемых с mislav's will paginate с Rails 3. Настоящее время я использую:отформатирует Rails 3 На страницу

# Gemfile 
gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', :branch => 'rails3' 

# company.rb 
class Company < ActiveRecord::Base 
    self.per_page = 8 
end 

# company_controller.rb 
def index 
    @companies = Company.where(...).paginate(:page => params[:page]) 
end 

Это делает пагинацию, но не 8 пунктов на каждой странице. Если я изменю код, чтобы не использовать «где», он отлично работает. Однако добавление «где» или «область видимости», по-видимому, вызывает проблемы. Любые идеи, что я делаю неправильно?

Спасибо.

ответ

14

Завершено, заставляя перемещать префикс страницы в запрос. Появляется ошибка с версией Rails 3. Таким образом, с использованием:

@companies = Company.where(...).paginate(:page => params[:page], :per_page => 8) 
+0

Это была ошибка. Теперь исправлено! Используйте gem 'will_paginate', '~> 3.0.pre4' – mislav

+0

@mislav Спасибо! Цените всю свою работу на камне! –

0

Почему вы используете «Компании», а не «Компания». Это может быть просто опечатка, но, похоже, это проблема.

+0

Да, опечатка. Исправлено. –

4

@Kevin, если вы хотите быть уверенным, что per_page согласована между различными запросами, вы можете использовать Company.per_page, например.

@companies = Company.where(...).paginate(:page => params[:page], :per_page => Company.per_page) 

Вы также можете дать попробовать на Каминари драгоценный камень, который намного лучше интегрирован с рельсов 3: http://railscasts.com/episodes/254-pagination-with-kaminari

class Company < ActiveRecord::Base 
    paginates_per 7 
end 

@companies = Company.where(...).page(params[:page])