レール、放射、および正規表現
-
29-09-2019 - |
質問
私はそれを使用するRailsサイトに取り組んでいます 放射CMS そして、最初の方法に従ってステートフルなナビゲーションを構築しています このリンク.
通常の式でURLを一致させて、各ナビゲーションリンクのアクティブ状態を表示するかどうかを判断します。例として、ここに2つのサンプルナビゲーション要素があります。1つは放射URL用です /communications/
そして、1つ /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アイテムは選択されていません。ただし、URLの場合のように、通信の正規表現は正しく機能していないようです /communications/
どちらの要素にも「選択された」クラスはありません(したがって、正規表現は一致しない必要があります)。しかし、私はテストしました
>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>
IRBでは、ご覧のとおり、正規表現は正常に機能しているようです。何がこれを引き起こしているのでしょうか?
tl; dr: "/communications/"
マッチ /communications\/$/
Rubyシェルでは、放射ナビゲーションのコンテキストではありません。何が起きてる?
解決
から Radiant's Wiki, 、追加する必要がないようです /
あなたのregexsまたは脱出の周りにs /
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\/$\//
これは、「Slash Communications Slash Slash ofl-line Slash」につながります。
Ruby Regexsは、両方の開始にシンボルがあるという点で興味深いものです(^
)および行の終わり($
)開始(\A
)および文字列の終わり(\Z
)。だから、時々あなたは人々が使っているのを見るでしょう \A
と \Z
それらの正規表現で。