Problema con url_for

Hola gente,

Tengo estas dos rutas:

map.connect ‘company/:id/:action’, :controller => ‘company’
map.connect ‘:language/company/:id/:action’, :controller => ‘company’

Mi problema es que al llamar a url_for tal que
así:
redirect_to :controller => :company,
:action => :show,
:id => id,
:language => Locale.language.code

La ruta generada es esta:

es/company/show/17

Mientras que debería ser:

es/company/17/show

No consigo ver cual es el problema ¿tengo mal definidas las rutas o algo
así?

David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

¿Habéis mirado el log a ver qué variables te está mapeando a qué valores?

Estas seguro que no tienes otro “map.connect” en tus rutas?

si tienes un map.connect ‘:language/:controller/:action/:id’ en algun
lugar, entonces es posible que url_for utilice esa ruta en lugar de
las demas. Las rutas son priorizadas de acuerdo al orden en que
aparecen en routes.rb

Asi que algo como:
map.connect ‘:language/:controller/:action/:id’
map.connect ‘:language/company/:id/:action’, :controller => ‘company’

genera resultados completamente diferentes a si inviertes el orden de
las lineas.

En general, debes colocar las rutas mas especificas (por ejemplo,
aquellas que contienen valores fijos como “company”) al principio del
archivo de rutas, y las mas generales al final, terminando
probablemente con algo como "map.connect ‘:controller/:action/:id’ "

On 3/14/07, Sebastian D. [email protected] wrote:

En general, debes colocar las rutas mas especificas (por ejemplo,
aquellas que contienen valores fijos como “company”) al principio del
archivo de rutas, y las mas generales al final, terminando
probablemente con algo como "map.connect ‘:controller/:action/:id’ "

Hola Sebastian, gracias por contestar,

Sí que tengo la ruta ‘:language/:controller/:action/:id’, pero la
tengo definida por debajo, por lo que comentas de la prioridad.

Es extraño porque puedo acceder perfectamente a ‘es/company/4/show’,
pero al hacer un redirect_to(:language => ‘es’, :controller =>
:company, :action => show, :id => 4) la ruta generada es
‘es/company/show/4’

He hecho un montón de pruebas y no veo la forma de solucionar este asunto
:frowning:


David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

On 3/14/07, Sebastian D. [email protected] wrote:

Intenta con :controller => “company”, como string en lugar de simbolo.

Y si no te molesta compartir con nosotros tus rutas, quizas seria de
ayuda poder ver la configuracion completa.

Acabo de probarlo también, no hay manera, te pego todas las rutas que
tengo por si te sirven, muchas gracias:

map.connect ‘’, :controller => ‘index’

map.connect ‘:language/company/search’, :controller => ‘company’,
:action => ‘search’, :id => nil
map.connect ‘company/search’, :controller => ‘company’, :action =>
‘search’, :id => nil

map.connect ‘:language/company/:id/:action.:format’, :controller =>
‘company’
map.connect ‘company/:id/:action.:format’, :controller => ‘company’

map.connect ‘:language/company/:id/:action’, :controller => ‘company’
map.connect ‘company/:id/:action’, :controller => ‘company’

map.connect ‘:language/:controller/:action/:id.:format’
map.connect ‘:controller/:action/:id.:format’
map.connect ‘:language/:controller/:action/:id’
map.connect ‘:controller/:action/:id’

map.connect ‘:language’, :controller => ‘index’


David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

Intenta con :controller => “company”, como string en lugar de simbolo.

Y si no te molesta compartir con nosotros tus rutas, quizas seria de
ayuda poder ver la configuracion completa.