# Cache\_page e parametri aggiuntivi

**URL:** <https://www.ruby-forum.com/t/cache-page-e-parametri-aggiuntivi/123631>\
**Category:** IT\
**Created:** [December 19, 2007, 10:58am UTC](https://www.ruby-forum.com/t/cache-page-e-parametri-aggiuntivi/123631 "2007-12-19T10:58:50Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![mballante](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b77776/32.png) [@mballante](https://www.ruby-forum.com/u/mballante)\
**Post date:** [December 19, 2007, 10:58am UTC](https://www.ruby-forum.com/t/cache-page-e-parametri-aggiuntivi/123631/1 "2007-12-19T10:58:50Z")

</div>

Un saluto agile a tutti 😉

Giocando col page caching (aggiungendo caches\_page :blabla), mi sono  
accorto di uno strano comportamento di Ror.

Ogni parametro della richiesta viene ignorato, ed il file html statico  
generato è sempre uno e viene sovrascritto.

Ok, non si è capito nulla, faccio un esempio che è più semplice 🙂  
Premessa, uso will\_paginate

URL:  
/nome-della-categoria/l/numero-pagina  
params[:id]/l/params[:page] (params[:page] è ‘opzionale’)

Page caching mi crea sempre un  
/nome-della-categoria/l.html  
ignorando il parametro :page, o ogni altro parametro che metto dopo  
page.

Ho “risolto” facendo un piccolo hack nel  
actionpack/lib/action\_controller/caching.rb, nella funzione “cache\_page”

da  
def cache\_page(content = nil, options = {})  
return unless perform\_caching && caching\_allowed  
self.class.cache\_page(content || response.body,  
url\_for(options.merge(:only\_path =\> true, :skip\_relative\_url\_root =\>  
true, :format =\> params[:format])))  
end

a  
def cache\_page(content = nil, options = {})  
return unless perform\_caching && caching\_allowed  
self.class.cache\_page(content || response.body,  
url\_for(params.merge(:only\_path =\> true, :skip\_relative\_url\_root =\>  
true, :format =\> params[:format])))  
end

Ora mi viene generato correttamente il file di cache:  
/nome-della-categoria/l.html  
/nome-della-categoria/l/1.html  
/nome-della-categoria/l/2.html  
/nome-della-categoria/l/3.html  
/nome-della-categoria/l/4.html  
[ecc…]

e non viene sovrascritto in continuazione  
/nome-della-categoria/l.html

e funziona anche con altri parametri che aggiungo in coda all’url.

Ora, la domanda  
è:sono io che sto sbagliando? mi sono scordato di qualcosa? (il parametro  
:page nel routes.rb è indicato). Troppo caffè? Fette di salame sugli  
occhi? Il framework è bacato? (naaaaa)

Sbirciando in Rails 2.0 ho visto che si fa sempre riferimento a quel  
options, e non a params.

Non mi va di tenere una versione (seppur freezed) hackata, qualcuno mi  
può dare una dritta su come posso uscire da questo intoppo?

cicciput:~# rails -v && ruby -v  
Rails 1.2.3  
ruby 1.8.5 (2006-08-25) [x86\_64-linux]  
cicciput:~#

Thanks!

---

<div class="post-metadata">

**Author:** ![mballante](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/b77776/32.png) [@mballante](https://www.ruby-forum.com/u/mballante)\
**Post date:** [December 26, 2007, 1:00pm UTC](https://www.ruby-forum.com/t/cache-page-e-parametri-aggiuntivi/123631/2 "2007-12-26T13:00:19Z")

</div>

prova a usare la cache direttamente sulle viste e aggiungi anche un  
parametro id, in quel modo puoi differenziare le pagine in base all’id.  
Non credo che con caches\_page puoi differenziare le pagine. Se la tua  
soluzione ti sembra buona considera di inviare la patch.

Oscar
