2010-03-29 9 views
15

En mi aplicación Rails, quiero usar la gema will_paginate para paginar en mi consulta SQL. ¿Es eso posible? He intentado hacer algo como esto, pero no funcionó:¿Es posible combinar 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') 

Si no es así, se puede recomendar una forma de evitar esto? No quiero tener que escribir mi propia paginación.

Respuesta

46

Uso paginate_by_sql, es decir

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) 

Como regla general cualquier buscador puede ser paginado mediante la sustitución de la find* con paginate*.

-2

Prueba esto:

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

Lo will_paginate y carriles versión está usando?

+5

En su solución, se aplica la paginación en el conjunto de resultados devuelto por el 'find_by_sql' . Por lo tanto, es posible que tenga que tratar con un gran conjunto de resultados y, por lo tanto, el sistema tiene que realizar cálculos redundantes. –

+0

Gracias por la entrada. –

-2

User.paginate_by_sql (sql,: Página => params [: página],: per_page => 10)

+0

por página indica cuántos se muestran en cada página –

Cuestiones relacionadas