Hola gente,

Estoy intentando mejorar el código de un (viejo) proyecto Rails heredado...

Suponiendo que tenemos algo como:

https://gist.github.com/f4921b74f10d45f04c38

Dado un view para el action PostsController#show donde
se muestran los datos del post, su lista de comentarios y un
formulario para que el usuario escriba un nuevo comentario,
buscar la mejor manera de que si el usuario escribe mal el
captcha se le pueda informar de esto sin que el mismo pierda el
contenido del comentario que elaboró. De esta forma el usuario
tendrá una segunda oportunidad para ingresar el comentario sin
tener que reescribirlo.

La "dificultad" está en que no se puede hacer un redirect porque se perdería el contenido del comentario que escribió. Habría que hacer un render pero del action `show` de otro controller (el de Posts) para que se carguen todas las variables necesarias, etc.

Alternativas (espero que se entienda):

1. guardar el contenido del comentario en la sesión y redireccionar. No me gusta. Chancho y además al usar la CookieStore, tengo poco espacio que no quiero desperdiciar.

2. guardar el contenido del comentario en la base con un flag de "draft" o algo así, y redireccionar. El tema es que si realmente tengo un bot intentando meter comentarios y fallando en el captcha... voy a tener cientos (miles) de inserts en la base que no quiero. Feo.

3. mover el 99% del código de `PostsController#show` a algo como `ApplicationController#load_post_show_data` para llamarlo desde el `check_captcha` y directamente hacer un render del template `posts_controller/show` en vez del redirect. No me convence.

Tonces? alternativas?

Sí... ya sé... los estoy haciendo pensar too much. :)

Diego
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a