2009-09-18 2 views
0

У меня возникли проблемы при использовании разбивки на страницы вместе с именованной областью. Вторая страница или любая последовательная страница разбивки на страницы с использованием named_scope по-прежнему возвращает результат с первой страницы. Использование find (: all) возвращает результат разбивки на страницы правильно. Кто-нибудь мог использовать их обоих правильно или испытать ту же проблему?Использование will_paginate с named_scoped

class Study < ActiveRecord::Base 
    named_scope :opened, :conditions => {:study_stat => [205, 11203]} 
end 

#find(:all) returns correct studies for both pages 
Study.find(:all, :conditions => {:study_stat => [205, 11203]}).paginate(:per_page => 10, :page => 1).each {|e| pp e.study_number } 
Study.find(:all, :conditions => {:study_stat => [205, 11203]}).paginate(:per_page => 10, :page => 2).each {|e| pp e.study_number } 

#using named_scope returns correct result for the first page but the second page has the same studies as ones in the page one. 
Study.opened.paginate(:per_page => 10, :page => 1).each {|e| pp e.study_number } 
Study.opened.paginate(:per_page => 10, :page => 2).each {|e| pp e.study_number } 

ответ

0

Попробуйте включить: все опции в вашем paginate-вызове named_scope. Я помню, что у меня был подобный вопрос некоторое время назад, и это исправило его для меня.

Таким образом, вместо

Study.opened.paginate(:per_page => 10, :page => 2) 

попробовать

Study.opened.paginate(:all, :per_page => 10, :page => 2) 
+0

Спасибо. Я попробовал это, но все равно не повезло. Одна интересная часть может быть, что она возвращает правильное количество результатов. Поэтому, если страница 2 возвращает 3 исследования, то показаны первые три исследования первой страницы. – achristoph

1

я узнал почему. Как указано в rdoc , для правильной работы разбиения на страницы требуется параметр порядка. Это особенно верно для named_scope. (Я использую SQL Server 2005)

User.active.paginate(:all, :per_page => 5, :page => 1, :order=>'id').each {|e| pp e.user_name } 

User.active.paginate(:all, :per_page => 5, :page => 2, :order=>'id').each {|e| pp e.user_name }