2010-03-29 12 views
15

W mojej aplikacji Rails chcę użyć klejnotu will_paginate do paginacji na moim zapytaniu SQL. Czy to jest możliwe? Próbowałem zrobić coś takiego, ale to nie zadziałało:Czy można łączyć will_paginate z find_by_sql?

@users = User.find_by_sql(" 
    SELECT u.id, u.first_name, u.last_name, 
    CASE 
     WHEN r.user_accepted =1 AND (r.friend_accepted =0 || r.friend_accepted IS NULL) 
     .........").paginate(
        :page => @page, :per_page => @per_page, 
        :conditions => conditions_hash, 
        :order => 'first_name ASC') 

Jeśli nie, czy możesz zalecić sposób obejścia tego? Nie chcę pisać własnej paginacji.

Odpowiedz

46

Zastosowanie paginate_by_sql tj

sql = " SELECT * 
     FROM users 
     WHERE created_at >= '#{2.weeks.ago}' 
     ORDER BY created_at DESC " 
@users = User.paginate_by_sql(sql, :page => @page, :per_page => @per_page) 

Zasadniczo każdy wykrywacz można stronicowana zastępując find* z paginate*.

-2

Spróbuj tego:

@users = User.find_by_sql 
@users = @users.paginate 

Co will_paginate i szyny wersji używasz?

+5

W rozwiązania, stronicowanie nakłada się na zestaw wynik zwracany przez 'find_by_sql' . Być może będziesz musiał zmierzyć się z dużym zestawem wyników i dlatego system musi wykonać nadmiarowe obliczenia. –

+0

Dzięki za wejście. –

-2

User.paginate_by_sql (SQL,: stronę => params [: strona]: per_page => 10)

+0

per_page wskazują, ile jest wyświetlanych na każdej stronie –

Powiązane problemy