Cache_page e parametri aggiuntivi

Un saluto agile a tutti :wink:

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 :slight_smile:
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!

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