Pregunta

Estoy trabajando en un sitio de rieles que utiliza el CMS radiante y estoy construyendo la navegación con estado de acuerdo con el primer método en este enlace .

Estoy coincida con el URL en expresiones regulares para determinar si debe o no mostrar el estado activo de cada enlace de navegación. A modo de ejemplo, aquí hay dos elementos de navegación de la muestra, una para el /communications/ radiante URL y una para /communications/press_releases/:

    <r:if_url matches="/communications\/$/"><li class="bottom-border selected">Communications</li></r:if_url>
    <r:unless_url matches="/communications\/$/"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
    <r:if_url matches="/communications\/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
    <r:unless_url matches="/communications\/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>

funcionamiento muy bien de Todo para la página de comunicados de prensa - es decir, cuando la URL es /communications/press_releases elemento de las notas de prensa de navegación recibe la clase 'selected' apropiadamente, y el tema de las comunicaciones de navegación no está seleccionada. Sin embargo, no parece que la Comunicación de expresión regular para funcionar correctamente, como cuando la URL es /communications/ ni elemento tiene la clase 'selected' (así, el texto debe estar fallando para que coincida). Sin embargo, he probado

>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>

en la IRB, y como se puede ver, la expresión regular parece estar funcionando bien. ¿Cuál podría ser la causa de esto?

TL; DR : "/communications/" coincide /communications\/$/ en la cáscara de rubíes pero no en el contexto de la navegación radiante. ¿Qué está pasando aquí?

¿Fue útil?

Solución

del radiante wiki , parece que no es necesario añadir /s alrededor de los regexs o /s escapar. Proveedores:

<r:if_url matches="/communications/$"><li class="bottom-border selected">Communications</li></r:if_url>
<r:unless_url matches="/communications/$"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
<r:if_url matches="/communications/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
<r:unless_url matches="/communications/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>

Lo que está sucediendo detrás de las escenas es que llama radiante Regex.new en la cadena en matches, por lo que la expresión regular que estaba tratando de igualar antes era la siguiente:

 Regexp.new '/communications\/$/'
# => /\/communications\/$\// 

que se traduce en 'comunicaciones slash slash al final de la línea de barra' que realmente duda es lo que desea.

Rubí regexs son interesantes en que hay símbolos para el INICIO (^) y al final de la línea ($), así como de partida (\A) y al final de la cadena (\Z). Es por eso que a veces se pueden ver las personas que utilizan \A y \Z en sus expresiones regulares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top