Rails, Radiant, et Regex
-
29-09-2019 - |
Question
Je travaille sur un site Rails qui utilise le Radiant CMS et je navigation stateful construction selon la première méthode ce lien .
Je l'URL correspondant à des expressions régulières pour déterminer si oui ou non pour montrer l'état actif de chaque lien de navigation. À titre d'exemple, voici deux éléments de navigation échantillons, l'un pour l'URL Radiant /communications/
et un pour /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>
va bien tout fonctionne pour la page Communiqués de presse - qui est, lorsque l'URL est /communications/press_releases
l'objet de communiqués de presse obtient la classe appropriée « choisie », et le point de communication est désélectionné. Cependant, les communications __gVirt_NP_NN_NNPS<__ expression régulière ne semble pas fonctionner correctement, comme lorsque l'URL est /communications/
ni élément a la classe « choisie » (donc le regex doit faillirait en conséquence). Cependant, je l'ai testé
>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>
dans la CISR, et comme vous pouvez le voir, l'expression régulière semble fonctionner très bien. Que pourrait être la cause?
TL; DR : "/communications/"
correspond /communications\/$/
dans le shell Ruby, mais pas dans le contexte de la navigation Radiant. Qu'est-ce qui se passe ici?
La solution
De il vous ressemble ne wiki Radiant, besoin d'ajouter /
s autour de votre regexs ou /
s d'échappement. Essayez:
<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>
Ce qui se passe les coulisses est que les appels Radiant Regex.new
sur la chaîne en matches
, donc le regex que vous essayez de faire correspondre avant était celui-ci:
Regexp.new '/communications\/$/'
# => /\/communications\/$\//
qui se traduit par « communications slash slash slash de fin de ligne » que je doute est vraiment ce que vous voulez.
Ruby regexs sont intéressants en ce sont des symboles pour les deux début (^
) et à la fin de la ligne ($
), ainsi que le démarrage (\A
) et à la fin de la chaîne (\Z
). C'est pourquoi parfois, vous verrez des gens en utilisant \A
et \Z
dans leurs expressions rationnelles.