27 Nov
duccio

duccio il 27 November 2007 parla di Rails Snippet

Rails: paginare una collezione

Lavorando su collezioni di oggetti provenienti da più tabelle si complica la gestione, compresa la paginazione. Googolando ho trovato questa funzione che potete inserire nell’application.rb e che vi consente di paginare collezioni di oggetti in modo semplice:

    1 def paginate_collection(collection, options = {})
    2   default_options = {:per_page => 10, :page => 1}
    3   options = default_options.merge options
    4   
    5   pages = Paginator.new self, collection.size, options[:per_page], options[:page]
    6   first = pages.current.offset
    7   last = [first + options[:per_page], collection.size].min
    8   slice = collection[first...last]
    9   return [pages, slice]
   10 end

Poi chiaramente dove vi serve:

    1 @pages, @items = paginate_collection Item.find_custom_query, :page => params[:page]

Chiaramente lo potete usare su una collezione così ad esempio: (Item.find(:all) + User.find(:all)).paginate_collection…

6 Commenti a “Rails: paginare una collezione”

  1. Pilu il 27 November 2007 alle 18:09 dice:

    Io di solito uso il plugin will_paginate….funziona praticamente nello stesso modo ma ti aggiunge un metodo di classe direttamente nel tuo modello…tipo:

    @posts = Post.paginatebyboard_id @board.id, :page => params[:page]

  2. duccio il 27 November 2007 alle 18:22 dice:

    Si quello è molto comodo… però non ho visto se puuò paginare collezioni di oggetti tipo:
    (Post + User).paginate…
    E mi sembra che il Will_Paginate non lo faccia.

    Con la funzione del post puoi farlo senza problemi…

    Un Saluto

    Duccio

  3. lorenzo il 29 November 2007 alle 17:31 dice:

    ma in quanti usano ruby in italia?

  4. duccio il 29 November 2007 alle 17:35 dice:

    Stanno aumentando :-) ruby rules!

  5. Vincenzo il 17 February 2008 alle 00:34 dice:

    Ruby on Rails è semplicemente straordinario!

    più giorni ci sto dietro più mi viene voglia di scrivere codice!!

  6. duccio il 17 February 2008 alle 02:26 dice:

    Ti Capisco!!

Scrivi un commento