Вопрос

Я работаю на сайте Rails, который использует Сияющий CMS и строю государственную навигацию в соответствии с первым методом в эта ссылка.

Я сопоставляю URL -адрес по регулярным выражениям, чтобы определить, показывать ли активное состояние каждой навигационной ссылки. В качестве примера, вот два образца навигационных элементов, один для лучистого URL /communications/ и один за /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>

Все работает нормально для страницы пресс-релизов-то есть, когда URL /communications/press_releases Пресс выпускает элемент NAV соответствующим образом получен «выбранный» класс, а элемент NAV Communications не выбран. Тем не менее, регулярное выражение связи, похоже, не функционирует правильно, так как, когда URL /communications/ Ни один из элементов не имеет класса «выбранного» (поэтому регулярность должна соответствовать). Тем не менее, я проверил

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

В IRB, и, как вы можете видеть, регулярное выражение, кажется, работает нормально. Что это может вызвать?

TL; доктор: "/communications/" Матчи /communications\/$/ в рубиновой оболочке, но не в контексте сияющей навигации. Что тут происходит?

Это было полезно?

Решение

От Вики Радианта, похоже, вам не нужно добавлять /S вокруг вашей регуляции или сбежать /с. Пытаться:

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

Что происходит за кулисами это сияющие звонки Regex.new на строке в matches, так что в форме, которую вы пытались соответствовать раньше, была этой:

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

Что переводится как «Слэш-сглаша конец строки», что, я действительно сомневаюсь, это то, что вы хотите.

Ruby Regexs интересны в том, что есть символы для оба начала (^) и конец линии ($) а также начать (\A) и конец строки (\Z) Вот почему иногда вы увидите, как люди используют \A и \Z в их регулярных выборах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top