Frage

Ich arbeite an einer Rails-Website, die die Radiant CMS und bin den Aufbau Stateful Navigation nach der erste Methode in diesem Link .

Ich bin Anpassung die URL zu regulären Ausdrücken, ob oder nicht, um zu bestimmen den aktiven Zustand jeden Navigationslink zu zeigen. Als Beispiel sind hier zwei Beispielnavigationselemente, eine für die Radiant URL /communications/ und eine für /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>

Alles funktioniert gut für die Seite Press Releases - das heißt, wenn die URL /communications/press_releases nav Pressemitteilungen ist Gegenstand der ‚ausgewählt‘ Klasse wird in geeigneter Weise, und die Kommunikations nav Artikel ist nicht ausgewählt. Allerdings ist die Kommunikation regulären Ausdruck scheint nicht richtig zu funktionieren, da, wenn die URL /communications/ ist weder Element hat die ‚ausgewählt‘ Klasse (so die regex fehlerhaft sein müssen übereinstimmen). Allerdings habe ich getestet

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

in IRB, und wie man sehen kann, scheint der reguläre Ausdruck adaequat zu sein. Was könnte die Ursache sein?

TL; DR : "/communications/" /communications\/$/ in dem Ruby-Shell stimmt aber nicht im Zusammenhang mit der Radiant-Navigation. Was ist denn hier los?

War es hilfreich?

Lösung

Radiant Wiki , es sieht aus wie Sie brauchen nicht zu hinzufügen /s um Ihre regexs oder Flucht /s. Versuchen Sie:

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

Was geschieht hinter den Kulissen ist, dass Radiant Regex.new auf der Saite in matches ruft, so dass die regex Sie vor dieser war zu passen versuchten:

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

was übersetzt 'Slash Kommunikation Slash End-of-line-slash', die ich wirklich Zweifel ist das, was Sie wollen.

ist Ruby-regexs interessant, dass es Symbole für Start (^) und Zeilenende ($) sowie Start (\A) und das Ende der Schnur (\Z). Deshalb manchmal werden Sie Menschen mit \A und \Z in ihren regulären Ausdrücke sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top