Link_to_unless_current y ampersand

Parece que algo tan sencillo como esto, va mal:

url="/usuarios/admin-list?estado=5&orden=nick"
link_to_unless_current(txt, url)

Aquí nunca le parece que sea current, y siempre saca el link, aunque
efectivamente sea esa la URL. El error se debe producir por culpa del
ampersand (&), pues para URLs con un sólo parámetro va bien… ¿se os
ocurre alguna alternativa que no implique cambiar las URLs? He probado
con regexp, pero tampoco funciona, no sé si porque lo hago mal (no soy
fuerte en regexp) o porque ocurre el mismo fallo que con
link_to_unless_current:

link_to_unless(request.request_uri =~ /Regexp.escape(url)$/, txt, url)

A ver si a alguien le ha pasado alguna vez lo mismo…

s2

El día 22 de septiembre de 2008 14:45, Fernando C.
[email protected]
escribió:> fuerte en regexp) o porque ocurre el mismo fallo que con

link_to_unless_current:

link_to_unless(request.request_uri =~ /Regexp.escape(url)$/, txt, url)

A ver si a alguien le ha pasado alguna vez lo mismo…

No suelo usar ese helper, sólo comentarte que en los ejemplos de la
API no pasan el string con la URL sino los parámetros:

<%= link_to_unless_current("Home", { :action => "index" }) %>

Raul M. wrote:

No suelo usar ese helper, s�lo comentarte que en los ejemplos de la
API no pasan el string con la URL sino los par�metros:

<%= link_to_unless_current("Home", { :action => "index" }) %>

Ya, pero es que estoy haciendo una función genérica para generación de
cabeceras con enlaces que permiten ordenar por cada columna, y los
parámetros van a ser diferentes en función de qué tabla se trate, por lo
que no puedo pasar los parámetros…

Por cierto, os pego el código por si a alguien le parece útil:

GENERADOR INTELIGENTE DE CABECERAS DE TABLAS

Recibe un array con las cabeceras que tiene que mostrar (admite

acentos en los nombres, y los quita de la URL), la url base (si es
blank, irá sin enlace), y las opciones

Opciones que admite:

- :default => el texto de columna que se considera predeterminada

- :center => un array indicando el texto de las columnas que van

centradas

- :otros_params => además del orden, las urls incluirán otros

parámetros, que hay que pasarle por aquí en forma de array
def ths(cols, url_base, opciones={})
opciones = {:tipo => ‘text’}.merge opciones
result = “<tr class=“cabecera_roja”>”
cols.each do |col|
txt = col.to_s.humanize
if !url_base.blank?
# Calcula la URL de destino
arr_params = Array.new(opciones[:otros_params])
arr_params << “orden=#{col.to_s.quita_acentos}” if
opciones[:default] != col
url = “#{url_base}#{(’?’ + arr_params.join(’&’)) if
arr_params.length > 0}”
txt = link_to_unless_current(txt, url) # – Esto debería
funcionar… pero nunca le parece el current, aunque lo sea, si la URL
tiene ampersand: /usuarios/admin-list?estado=5&orden=nick.
end
estilo = (opciones[:center] and opciones[:center].include?(col)) ?
’ style=“text-align:center”’ : ‘’
result += “<th#{estilo}>#{txt}”
end
result +=""
end

2008/9/22 Fernando C. [email protected]:

Ya, pero es que estoy haciendo una función genérica para generación de
cabeceras con enlaces que permiten ordenar por cada columna, y los
parámetros van a ser diferentes en función de qué tabla se trate, por lo
que no puedo pasar los parámetros…

Tú problema es que link_to_unless_current utiliza current_page?, que
no se porqué hace una escapeHTML a la URL que le pasas.

def current_page?(options)
url_string = CGI.escapeHTML(url_for(options))
request = @controller.request
if url_string =~ /^\w+:///
url_string ==
“#{request.protocol}#{request.host_with_port}#{request.request_uri}”
else
url_string == request.request_uri
end
end

Yo me haría mi propia versión de current_page? (por ahora no
sustituiría current_page? de Rails) y invocaría a “link_to_unless
my_current_page?(url), txt”.

Suerte.

Daniel R. Troitiño wrote:

2008/9/22 Fernando C. [email protected]:

Ya, pero es que estoy haciendo una función genérica para generación de
cabeceras con enlaces que permiten ordenar por cada columna, y los
parámetros van a ser diferentes en función de qué tabla se trate, por lo
que no puedo pasar los parámetros…

Tú problema es que link_to_unless_current utiliza current_page?, que
no se porqué hace una escapeHTML a la URL que le pasas.

def current_page?(options)
url_string = CGI.escapeHTML(url_for(options))
request = @controller.request
if url_string =~ /^\w+:///
url_string ==
“#{request.protocol}#{request.host_with_port}#{request.request_uri}”
else
url_string == request.request_uri
end
end

Yo me haría mi propia versión de current_page? (por ahora no
sustituiría current_page? de Rails) y invocaría a “link_to_unless
my_current_page?(url), txt”.

Suerte.

OK, muchas gracias!! He probado en la línea de tu idea… y en realidad,
la solución es muy fácil, una vez se sabe el problema:

txt = link_to_unless(request.request_uri == url, txt, url)

s2