2009-08-15 3 views

Répondre

1

Pour définir une classe large par défaut

class Post < ActiveRecord::Base 

    def self.per_page 
    25 
    end 

end 

Ou sur une requête en fonction de chaque requête utilisez la per_page dans votre appel

class Post <ActiveRecord::Base 

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

end 
1

Voici ce que je vais faire

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

Si OP veut faire en sorte que seul 10, 20 et 50 sont des options valides par page, vous pouvez étendre cette méthode pour appliquer cette contrainte. Quelque chose comme ['10', '20', '50']. Include? (Params [: page]) –

17

On dirait que l'OP a également demandé ici: http://railsforum.com/viewtopic.php?id=33793 et obtenu de bien meilleures réponses.

Pour adapter le meilleur il y a une solution, voici ce que j'aime:

(dans la vue)

<%= 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;}" %> 

(dans le contrôleur)

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

Merci pour votre exemple - c'était juste ce dont j'avais besoin pour un projet Rails 3. Un conseil cependant ... vous voudrez peut-être changer la partie de votre select_tag qui dit "params [: per_page] .to_i" juste "@per_page" puisque nous connaissons déjà la @per_page du contrôleur. Cette modification garantit que la valeur correcte est sélectionnée dans votre balise de sélection même s'il n'y a pas de paramètre per_page (par exemple l'action d'index). –

+0

Cela fonctionne pour moi. –

Questions connexes