Lio de urls que se repiten

A ver si me explico bien y pueden echarme una ayudita por que vaya lio
que tengo de urls…

Les cuento en mi vista
views/welcome/index.htm.erb

Me traigo los Post que tengo en la base de datos y muestro el titulo
con un
<%= link_to_show_post(post) # =>
http://localhost:3000/posts/2008/9/3/1-mi-primer-post
%>

El metodo del Helper es tal que así

def link_to_show_post(l)
link_to l.title, “posts/#{l.created_at.year}/#{l.created_at.month}/
#{l.created_at.day}/#{l.to_param}”
end

Hasta aqui todo correcto pero cuando accedo a la vista
views/posts/show.html.erb

los enlaces me los genera incorrectamente y eso que uso el mismo
helper, pero esta vez se genera una url

=>

http://localhost:3000/posts/2008/9/3/posts/2008/9/3/1-mi-primer-post

Tanto welcome/index.html.erb como posts/show.html.erb usan el mismo
partial para generar los posts.

¿Pueden alguien comentarme a que es debido esto?

Ah, mas datos, mi routes.rb
map.connect ‘posts/:year/:month/:day/:id’,
:controller => ‘posts’,
:action => ‘show’,
:year => /\d{4}/,
:month => /\d{1,2}/,
:day => /\d{1,2}/

map.resources : posts, :collection => { :musica => :get }

Probando y probando encontre una “chapu” solución que consistia en
pasarle al metodo del helper, el objeto y la acción que corresponde
tal que así
<%= link_to_show_post(post, controller.action_name) %>

Y luego en el helper generar la url en función de la acción pasada
pero no me pareció muy buena idea ya que el metodo del helper a pasado
a tener demasiadas lineas.

Vaya rollo que he soltado. Muchas gracias por la ayuda que puedan
facilitarme.

Saludos.

2008/9/3 alarkspur [email protected]:

El metodo del Helper es tal que así
pero esta vez se genera una url
:action => ‘show’,
Y luego en el helper generar la url en función de la acción pasada pero no
me pareció muy buena idea ya que el metodo del helper a pasado a tener
demasiadas lineas.

Vaya rollo que he soltado. Muchas gracias por la ayuda que puedan
facilitarme.

Lo digo de cabeza, pero las rutas en Rails están para que no tengas
que construirte las rutas tu mismo. En tu caso el problema está que la
ruta que creas “a mano” es relativa (no empieza por http ni por “/”),
y entonces el navegador se la “pega” detrás de la ruta actual, como
durante el show tu URL es posts/2008/9/3 al pegarle la ruta que tu
generas detrás te aparece repetida.

La solución es utilizar Rails y su sistema de rutas. Cuando defines
una ruta puedes utilizar sus parámetros especiales al generarla con
los métodos que proporciona Rails, de forma que si modificas
link_to_show_post por lo siguiente debería funcionar:

def link_to_show_post(l)
link_to l.title, :controller => ‘posts’, :action => ‘show’, :year =>
l.created_at.year, :month => l.created_at.month, :day =>
l.created_at.day, :id => l
end

De cualquier forma creo que debes estar utilizando una referencia de
Rails algo antigua, las cosas dejaron de hacerse de ese modo hace
algún tiempo.

Suerte.

hola,

link_to l.title,
“posts/#{l.created_at.year}/#{l.created_at.month}/#{l.created_at.day}/#{l.to_param}”

No te compliques la vida con rutas, helpers. etc… este problema no
tiene nada que ver con rails, sino con programación web en general.
Añádele una ‘/’ delante de posts. Eso hará que la url sea absoluta y no
relativa.

saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez

Lo dicho, muchas gracias voy a seguir probando cosillas con urls
aunque quizas lo mejor sea lo que comenta Javier de no complicarse la
vida con cosas raras.

quizás me expliqué mal… lo que quería decir es que en este caso te
estabas complicando al achacarle el problema de una simple URL relativa
al pobre e inocente Rails cuando no tenía culpa de nada (y tratando de
encontrar la solución en los helper, las rutas…).

En este caso concreto tenías un problema de HTML básico y por eso te
decía que no te complicases buscando la solución en Rails, porque no
tenía nada que ver.

saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez

Muchas gracias a ambos por la explicación y ayuda.

Estaba siguiendo los ejemplos que aparecen en el apartado routing de
la api y vaya la guerra que me ha dado el querer hacer una ruta algo
distinta.

Lo dicho, muchas gracias voy a seguir probando cosillas con urls
aunque quizas lo mejor sea lo que comenta Javier de no complicarse la
vida con cosas raras.

Saludos.

El 03/09/2008, a las 21:18, javier ramirez
escribió:

hola,

quizás me expliqué mal… lo que quería decir es que en este caso te
estabas complicando al achacarle el problema de una simple URL
relativa
al pobre e inocente Rails cuando no tenía culpa de nada (y tratando de
encontrar la solución en los helper, las rutas…).

No, pero si es verdad que yo me complico mucho a veces para nada,
tengo que cambiar un poco el chip y fijarme mas.

Ehi, tu libro RadRails pinta bien, enhorabuena!!!

Saludos.