Domanda

Sto lavorando su un sito Rails che utilizza il Radiant CMS e sto costruendo la navigazione stateful come per la primo metodo in questo link .

Sono corrispondenza dell'URL sulle espressioni regolari per determinare se visualizzare o meno lo stato attivo di ogni link di navigazione. A titolo di esempio, qui ci sono due elementi di navigazione di esempio, uno per il /communications/ Radiant URL e uno per /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>

lavorando bene del Tutto per la pagina di comunicati stampa - che è, quando l'URL è /communications/press_releases comunicati stampa nav voce ottiene la classe 'selezionato' in modo appropriato, e la voce le comunicazioni nav è selezionata. Tuttavia, le comunicazioni espressioni regolari non sembra funzionare correttamente, come quando l'URL è /communications/ né elemento ha la classe 'selezionato' (così l'espressione regolare deve essere non riesce a abbinare). Tuttavia, ho provato

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

in IRB, e come si può vedere, l'espressione regolare sembra funzionare bene. Che cosa potrebbe causare questo?

TL; DR : "/communications/" corrisponde /communications\/$/ nel guscio di Ruby, ma non nel contesto della navigazione Radiant. Che cosa sta succedendo qui?

È stato utile?

Soluzione

di Radiant wiki , sembra che non è necessario aggiungere /s intorno alle vostre regexs o /s fuga. Prova:

<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>

Quello che sta accadendo dietro le quinte è che Radiant chiama Regex.new sulla corda in matches, in modo che il regex si stava tentando di partita prima era questa:

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

che si traduce in 'comunicazioni oblique taglio su end-of-line barra', che ho davvero dubbio è quello che vuoi.

rubino regexs sono interessanti dal fatto che sono simboli per entrambi inizio (^) e alla fine della linea ($) così come inizio (\A) e fine stringa (\Z). Ecco perché a volte si vedrà persone che utilizzano \A e \Z nelle loro espressioni regolari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top