2010-04-08 5 views
0

Dans mon application, il existe une ressource, une machine et une ressource imbriquée provenant de la machine: ip.Paramètres avec des points sur l'URI

Je veux être en mesure d'accéder à l'URI d'un IP en tapant l'adresse IP.

L'URI doit être quelque chose comme ceci:

/machines/m123/ips/192.168.0.1.xml 

Où « M123 » est le nom de la machine et « 192.168.0.1 » est l'un des ips de cette machine.

Le problème ici est que les rails manquent de comprendre les points de l'ip et le format. Lorsque je tente d'accéder à cette page, je reçois:

No route matches "/machines/m123/ips/192.168.0.1.xml" 

Et si je remplace les points pour tout autre caractère cela fonctionne, des moyens que sorcière rails gère pas les points sur l'URI.

Existe-t-il un moyen d'entrer une expression rationnelle plus complexe sur les routes pour s'assurer que les rails peuvent la traiter comme je le souhaite? J'utilise les rails 2.3.5 et Ruby 1.8.7.

Merci.

+0

Pouvez-vous pas penser à mettre quelque chose comme /machines/m123/ips/[192.168.0.1].xml? – Kangkan

+0

Je ne suis pas familier avec Rail mais je pense que vous verriez ce problème avec un processeur URI, le '.' est un caractère de séparation important pour les URI, vous essayez d'en abuser, même involontairement. Remplacez-le par un autre caractère et parse dans votre code. – Lazarus

Répondre

2

Utilisez le :requirements => { :param_name => pattern_regex } param:

IP_PATTERN = /\A(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)(?:\.(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)){3}\z/.freeze 
map.resources :ip, :requirements => { :id => IP_PATTERN } 
+0

Le motif n'est pas correct, mais il fait l'affaire. Je vous remercie. – robertokl

+0

Etes-vous sûr que le motif n'est pas correct? Pouvez-vous nommer le problème ou fournir un exemple pour le prouver? – clyfe

Questions connexes