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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs