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!