�Lo quieres usar para eso? Si no es as� tendr�s que dejar que Rails lo
traduzca (es lo correcto en este caso) o buscar una alternativa a ese
car�cter.
SÃ, si no digo que no
Pero me pidieron una aplicación RESTful y mis usuarios se quedan un poco
con cara de situación cuando ven que las URLs no salen tan bonitas, con
todos esos caracteres codificados.
SÃ, si no digo que no
Pero me pidieron una aplicación RESTful y mis usuarios se quedan un poco
con cara de situación cuando ven que las URLs no salen tan bonitas, con
todos esos caracteres codificados.
Es decir, parejas de key=valor hasta el infinito. En routes.rb sólo se
me ocurrÃa con una expresión regular.
Sin embargo, al realizar un link_to con un id como prueba=valor/prueba2
me da el siguiente error:
ActionController::RoutingError in Queries#show
Showing app/views/queries/by_att.rhtml where line #20 raised:
sdrs_query_url failed to generate from {:action=>“show”,
:controller=>“queries”, :id=>“prueba=valor/prueba2”}, expected:
{:action=>“show”, :controller=>“queries”}, diff:
{:id=>“prueba=valor/prueba2”}
Intuyo que es por la barra pero… cómo podrÃa hacerlo entonces?
Me vas a llamar pesado, pero insisto en que mapear directamente
expresiones con caracteres reservados para URLs a URLs es meterse en un
jardÃn muy complicado Si no quieres escapar las cosas a mano yo veo
dos alternativas:
Notación tradicional (fea, sencilla como ella sola):
Si tu jefe/cliente no sabe las implicaciones de lo que te ha pedido
puedes explicarle la situación y ofrecerle la alternativa de escapar los
caracteres problemáticos a costa de que no se vean tal cual en la URL, o
cualquiera de las otras dos que te propongo (+ las alternativas que
puedan surgir en esta lista).
Si sabe bien lo que te ha pedido, por favor dile de mi parte que tiene
muy mala leche…
La notación tradicional hubiera sido una opción (las query variables)
pero están enchufando un crawler para indizar y un buscador, y existen
algunos buscadores que obvian las rutas con query variables.
Me vas a llamar pesado, pero insisto en que mapear directamente
expresiones con caracteres reservados para URLs a URLs es meterse en un
jardÃn muy complicado Si no quieres escapar las cosas a mano yo veo
dos alternativas:
Notación tradicional (fea, sencilla como ella sola):
Si tu jefe/cliente no sabe las implicaciones de lo que te ha pedido
puedes explicarle la situación y ofrecerle la alternativa de escapar los
caracteres problemáticos a costa de que no se vean tal cual en la URL, o
cualquiera de las otras dos que te propongo (+ las alternativas que
puedan surgir en esta lista).
Si sabe bien lo que te ha pedido, por favor dile de mi parte que tiene
muy mala leche…
Y sobre lo de no mapear directamente expresiones con caracteres URL,
estoy de acuerdo en que cuantas menos preocupaciones mejor,
pero mira por ejemplo una busqueda en google:
complicado
No es que sea complicado, es que tener esos caracteres reservados en las
URLs seguramente puede dar problemas en alguna situación. Ya te digo que
para estas cosas yo prefiero seguir los estándares, y el RFC lo deja
claro en este caso:
Many URL schemes reserve certain characters for a special meaning:
their appearance in the scheme-specific part of the URL has a
designated semantics. If the character corresponding to an octet is
reserved in a scheme, the octet must be encoded. The characters
“;”,
“/”, “?”, “:”, “@”, “=” and “&” are the characters which may be
reserved for special meaning within a scheme. No other characters
may
be reserved within a scheme.
Asà que, cuando introduzco en el browser algo como /key/value.xml
toma todo como la ruta, obviando el XML ( no lo obvia, lo incluyo como
parte del segundo valor de la ruta).
Funciona bien haciendo las llamadas desde un cliente HTTP como curl,
pero n desde el navegador. ¿Teneis idea de cómo resolver esto?
PD: Mis rutas en routes.rb serÃan estas:
map.connect
‘sdrs/queries/+specs.:format’, :controller=> “queries”,
:action=>“show”
map.queries ‘sdrs/queries/*specs’, :controller=> “queries”,
:action=>“show”
He probado a poner un requirements especificando los valores que puede
tener “format”, pero no soluciona nada.
Asà que, cuando introduzco en el browser algo como /key/value.xml
toma todo como la ruta, obviando el XML ( no lo obvia, lo incluyo como
parte del segundo valor de la ruta).
Funciona bien haciendo las llamadas desde un cliente HTTP como curl,
pero n desde el navegador. ¿Teneis idea de cómo resolver esto?
Mal asunto Por lo que comentan aquÃ[1] el problema en efecto es la
versión de Rails. Si no puedes subir de versión se me ocurre hacer un
apaño en el controlador, metiendo un filtro que procese a manopla el
último parámetro:
if params[:specs] && params[:specs].last.ends_with?(‘.xml’)
params[:format] = ‘xml’
params[:specs].last.gsub!(‘.xml’,‘’)
end
(Tengo algo asà como:
map.sdrs_by_range_times “foo/by_range/:att/:range”, :controller => “…”,
:action => “…”, :att => nil, :range => nil
donde range puede ser decimal, y claro, Rails se confunde con el punto,
aunque no deberÃa, pues si el final es .xml, pues es de la extensión, no
deberÃa confundirse con el resto de puntos… )
Puede ser la versión… o que tu ruta es un pelÃn diferente. Yo tengo:
map.connect ‘sdrs/queries.:format’, :controller=> “…”, :action=>“…”
map.connect ‘sdrs/queries/+specs.:format’, :controller=> “…”,
:action=>“…”
map.queries ‘sdrs/queries/*specs.:format’, :controller=> “…”,
:action=>“…”
Entre otras cosas porque no me deja poner la que tú tienes (dice que:
“Route segment “:specs” cannot be optional because it precedes a
required segment.”)
aunque no deberÃa, pues si el final es .xml, pues es de la extensión, no
deberÃa confundirse con el resto de puntos… )
Por lo que leo en otro hilo has actualizado a Rails 2.0.2, imagino que
es esta aplicación de la que estábamos hablando Si es asà creo que
has hecho muy bien: si quieres una aplicación REST esta versión está
mejor preparada (y el route globbing funciona mejor, ya lo has visto)