Creacion de rutas - error en link_to y link_to_remote


#1

Buenas a todos, estoy intentando armar unas rutas para mi aplicacion,
pero tengo problemas cuando se arman los links con link_to y
link_to_remote, el tema es asi:

Mis rutas en routes.rb son:
map.connect ‘:categoria/:subcategoria’,:controller => “avisos”,:action
=> “listar”
map.connect ‘:categoria’,:controller => “inicio”,:action => “index”

Cuando armo los links pongo:
<%= link_to subcategoria.nombre,
{
:categoria => subcategoria.categoria,
:subcategoria => subcategoria
},
{:title => "Detalle "+subcategoria.nombre}
%>

Pero esto me arma un link de la forma:
/categoriaNombre?subcategoria=subcategoriaNombre

Siendo que el “?subcategoria=subcategoriaNombre” no quiero que tenga ese
formato sino: “/subcategoriaNombre”

La ruta para categoria esta bien y la toma bien y el orden de las rutas
las tengo como indico arriba, con lo cual deberia tomar primero el:
map.connect ‘:categoria/:subcategoria’,:controller => “avisos”,:action
=> “listar”

para armar esa ruta.

Si alguien me puede guiar en que estoy errandole, se los agradeceria.


#2

Hola Agustín, no se si me entero de lo que quieres pero qué tal algo
así:

routes.rb

map.categoria_subcategoria ‘/:categoria/:subcategoria’, :controller
=> “avisos”, :action => “listar”
map.categoria ‘/:categoria’, :controller => “inicio”, :action =>
“index”

para probar en las vistas

Categoria: <%= h params[:categoria] %>

Subcategoría: <%= h params[:subcategoria] %>

<%= link_to ‘caca’, categoria_path(‘caca’) %>

<%= link_to ‘culo’, categoria_path(‘culo’) %>

<%= link_to ‘pedo’, categoria_path(‘pedo’) %>

<%= link_to ‘pedo/pis’, categoria_subcategoria_path(‘pedo’, ‘pis’) %>

O sea, que a las rutas les puedes pasar parámetros según el orden.

Ahora, recuerda que:

The priority is based upon order of creation: first created ->

highest priority.

O sea que si pones esas rutas antes de las demás, te anulará muchas de
las siguientes. Recuerda ponerlas según la prioridad que quieras o
añadirle un prefijo para distinguirlas o algo.

Y perdona por mis ejemplos escatológicos pero es lo primero que me ha
venido a la cabeza :stuck_out_tongue:

2009/1/16 Agustin Viñao removed_email_address@domain.invalid:

<%= link_to subcategoria.nombre,
Siendo que el “?subcategoria=subcategoriaNombre” no quiero que tenga ese

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Jaime I.
http://jaimeiniesta.com
http://www.workingwithrails.com/person/6722-jaime-iniesta


#3

Gracias por la ayuda y muy claros los ejemplos :stuck_out_tongue:

Ya pude generar las rutas necesarias con el ejemplo que me pasaste.

Saludos

2009/1/16 Jaime I. removed_email_address@domain.invalid


#4

Me alegro de haber podido ayudarte…

Para lo otro, claro, si te pasan como parámetro “electronica-y-hogar”
y quieres encontrar un modelo cuyo campo contenga “Electrónica y
Hogar” puede ser complicado pq puede haber varios casos, con
mayúsculas, sin ellas, con más espacios, tildes, etc…" O sea que con
el to_param que usas puedes llegar al mismo resultado desde diferentes
cadenas de origen, por ejemplo “ELECTRONICA Y HOGAR” y “Electronica y
hogar”.

Creo que lo mejor sería tener otro campo con la cadena tal cual la vas
a buscar, “electronica-y-hogar”. Una buena manera de gestionar esto
automáticamente con un plugin como sluggable_finder, que te genera
este tipo de campos y se encarga de que no se repitan, etc.:

http://www.estadobeta.com/2007/07/27/plugin-rails-sluggable_finder/

2009/1/16 Agustin Nicolas Viñao Laseras removed_email_address@domain.invalid:

En este caso tenemos:
item que tiene las correspondientes claves a las tablas categoria y
y como parametro me llega categoria[“electronica-y-hogar”],

=> “avisos”, :action => “listar”
<%= link_to ‘pedo/pis’, categoria_subcategoria_path(‘pedo’, ‘pis’) %><br
añadirle un prefijo para distinguirlas o algo.

map.connect ‘:categoria/:subcategoria’,:controller => “avisos”,:action
%>
map.connect ‘:categoria/:subcategoria’,:controller => “avisos”,:action
http://lists.simplelogica.net/mailman/listinfo/ror-es
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Jaime I.
http://jaimeiniesta.com
http://www.workingwithrails.com/person/6722-jaime-iniesta


#5

Apreovecho a hacer la 2da pregunta del caso.

Ya cree las URLs como queria, en este caso responden al path:

/:categoria/:subcategoria

Para una buena construccion de las urls me quedaria un ejemplo:

/electronica-y-hogar/venta-de-equipos

En este caso tenemos:
Categoria: electronica-y-hogar
Subcategoria: venta-de-equipos

Siendo que las categorias originales son:
Categoria: Electronica y Hogar
Subcategoria: Venta de Equipos

Las modificaciones para la construccion de la URL las hice redefiniendo
el
to_param (
self.nombre.downcase.gsub(/[^[:alnum:]]/,’-’).gsub(/-{2,}/,’-’) )
en cada modelo, pero ahora necesito encontrar bajo esos 2 parametros una
item que tiene las correspondientes claves a las tablas categoria y
subcategoria.

Es decir mi modelo es:
Items{
id
nombre
categoria_id
subcategoria_id
}

y como parametro me llega categoria[“electronica-y-hogar”],
subcategoria[“venta-de-equipos”], hay alguna forma de hacer que en un
find
para un campo de texto busque de la misma forma que como quedaria dicho
parametro cuando lo pasa en to_param?

Esto lo pregunto porque con Items.Find_by_nombre(categoria,subcategoria)
no
lo va a encontrar nunca por como los convierte el to_param.

2009/1/16 Agustin Nicolas Viñao Laseras removed_email_address@domain.invalid


#6

Voy a seguir el consejo y ver ese plugin, tengo en la app el plugin
permalink_fu pero ya le vi el problema que lo unico que hace es quitar
los
caracteres no validos y espacio pero nada mas, si alguien pone el mismo
titulo en 2 posts automaticamente genera un problema

sl2

2009/1/16 Jaime I. removed_email_address@domain.invalid