2009-08-15 4 views

Antwort

1

Um eine Klasse breite Standard

class Post < ActiveRecord::Base 

    def self.per_page 
    25 
    end 

end 

oder auf eine Abfrage durch Abfrage Basis verwenden, um die per_page in Ihrem Rufaufbau

class Post <ActiveRecord::Base 

    def self.posts_by_paginate 
    paginate(:all, :per_page => 25, :conditions => ["published = ?", true]) 
    end 

end 
1

Hier ist, was ich tun werde

Class UsersController < ApplicationController 
    def index 
     @users = User.paginate(:all, :page => params[:page], :per_page => params[:number_of_records]) 
    end 
end 
+0

Wenn OP nur sicherstellen will, dass 10, 20 und 50 sind pro Seitenoption gültig. Sie können diese Methode erweitern, um diese Einschränkung zu erzwingen. So etwas wie ['10', '20', '50']. Enthalten? (Params [: page]) –

17

Sieht aus wie das OP auch hier gefragt hat: http://railsforum.com/viewtopic.php?id=33793 und bekam viel bessere Antworten.

die beste Lösung dort anzupassen, hier ist was Ich mag:

(in der Ansicht)

<%= select_tag :per_page, options_for_select([10,20,50], params[:per_page].to_i), 
     :onchange => "if(this.value){window.location='?per_page='+this.value;}" %> 

(im Controller)

@per_page = params[:per_page] || Post.per_page || 20 
@posts = Post.paginate(:per_page => @per_page, :page => params[:page]) 
+3

Danke für dein Beispiel - das war genau das, was ich für ein Rails 3 Projekt brauchte. Ein Tipp aber ... Vielleicht möchten Sie den Teil von select_tag, der "params [: per_page] .to_i" sagt, auf "@per_page" ändern, da wir die @per_page bereits vom Controller kennen. Diese Änderung stellt sicher, dass der richtige Wert in Ihrem Select-Tag ausgewählt wird, selbst wenn es keinen per_page-Parameter gibt (z. B. die Indexaktion). –

+0

Es funktioniert für mich. –