2010-03-29 10 views
15

Nella mia applicazione Rails voglio usare la gemma will_paginate per impaginare sulla mia query SQL. È possibile? Ho provato a fare qualcosa di simile ma non ha funzionato:È possibile combinare will_paginate con 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') 

In caso contrario, si può consigliare un modo per aggirare questo? Non voglio dover scrivere la mia paginazione.

risposta

46

Uso paginate_by_sql, cioè

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) 

Come regola generale qualsiasi pagina può essere impaginato sostituendo il find* con paginate*.

-2

Prova questo:

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

Cosa will_paginate e rotaie versione stai usando?

+5

nella soluzione, l'impaginazione è applicato sul set di risultati restituito dal 'find_by_sql' . Quindi potresti dover gestire un ampio set di risultati e quindi il sistema deve eseguire un computing ridondante. –

+0

Grazie per l'input. –

-2

User.paginate_by_sql (SQL,: pagina => params [: pagina],: per_page => 10)

+0

per_page indicano quanti sono visualizzati in ogni pagina –

Problemi correlati