El día 1 de agosto de 2008 17:17, Daniel R.
Troitiño[email protected]
escribió:>
end
En el log aparece “Producto creado y http://test.host/products”, que
creo que demuestra que se podría hacer funcionar los expire_* con los
métodos hash_for_products_path y similares.
Daniel… está genial lo que has conseguido :D.
Pero se me ha vuelto a liar.
He conseguido que el ejemplo que me pasaste funcionara, pero si
intento generar urls con parámetros en forma de Hash, que es la forma
que más uso, la he cagado:
Ejemplo:
class ForumsCommentSweeper < ActionController::Caching::Sweeper
observe ForumsComment
def after_save( record )
p( “ruta: #{ruta_guapa_url}” )
p( “ruta: #{ruta_guapa_con_parametro_url( ‘X’ )}” )
p( “ruta: #{ruta_guapa_con_parametro_url( :parametro => ‘X’ )}” )
end
end
Las 2 rutas están bien definidas en el routes.rb. :
map.ruta_guapa ‘ruta/guapa’, :controller =>
‘develop’, :action => ‘simulate_login_form’
map.ruta_guapa_con_parametro ‘ruta/guapa/:parametro’, :controller =>
‘develop’, :action => ‘simulate_login_form’
La tercera peta con un:
NoMethodError: You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.rewrite
from
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:617:in
url_for' from (eval):17:in
ruta_guapa_con_parametro_url’
from
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:665:in
send!' from /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:665:in
method_missing’
from
/Users/fguillen/Documents/develop-ror/lcforums/app/sweepers/forums_comment_sweeper.rb:14
<<el número de línea no coincide porque el paste está resumido>> :in
after_save' from /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/observer.rb:157:in
send’
He intentado revisar el código de cachin.rb y de base.rb y veo que el
problema está en base.rb justo en este método:
def url_for(options = nil) #:doc:
case options || {}
when String
options
when Hash
@url.rewrite(rewrite_options(options))
else
polymorphic_url(options)
end
end
Si entra en el ‘when Hash’ estamos jodidos resulta que ‘@url’ es nil y
sacabó.
He intentado ver como ser carga este ‘@url’ y parece que se hace en el
método del mismo fichero:
def initialize_current_url
@url = UrlRewriter.new(request, params.clone)
end
He intentado invocarlo desde la consola para que se inicializara con
esto:
ForumsCommentSweeper.instance.controller.initialize_current_url
Pero es privado.
También desde consola he probado:
ForumsCommentSweeper.instance.controller.url =
ActionController::UrlRewriter.new(
ForumsCommentSweeper.instance.controller.request, nil )
Pero no le gustaba:
NoMethodError: undefined method `url=’ for
#ActionController::Base:0x2129d58
Vamos que estoy viendo que nos estamos metiendo un plato de
espaguettis del que no vamos a salir.
Si sale alguna sugerencia al rescate guay…
Sino intentaré borrar la cache de alguna manera cutre rollo borrar el
fichero o cualquier barbaridad.
Saludos, y muchas gracias.
f.
PD: a ver si no me he cargado nada de las gemas que he puesto log por
todas partes…