2010-03-29 7 views
15

In meiner Rails-Anwendung möchte ich den Edelstein will_paginate verwenden, um auf meine SQL-Abfrage paginieren. Ist das möglich? Ich habe versucht, etwas wie das, aber es hat nicht funktioniert:Ist es möglich, will_paginate mit find_by_sql zu kombinieren?

Wenn nicht, können Sie einen Weg um dies zu empfehlen? Ich möchte meine eigene Paginierung nicht schreiben müssen.

Antwort

46

Verwenden paginate_by_sql, d.h.

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) 

Als allgemeine Regel kann jeder finder die find* durch Ersetzen mit paginate* paginiert werden.

-2

Try this:

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

Welche will_paginate und Schienen-Version verwenden Sie?

+5

In Ihrer Lösung, Paginieren auf der Ergebnismenge durch die 'find_by_sql' zurück angewendet wird . Daher müssen Sie möglicherweise mit einem großen Ergebnissatz arbeiten, und daher muss das System redundante Berechnungen durchführen. –

+0

Danke für die Eingabe. –

-2

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

+0

per_page geben an, wie viele auf jeder Seite angezeigt werden –