2011-07-21 3 views
1

J'ai une page qui montre le profil de notre membre.Rails route map.connect avec barre oblique finale ne passant pas: id au contrôleur (Rails 2.3.5)

Tout fonctionne bien si on l'appelle comme ça

www.mysite.com/members/membername 

mais cela ne passe pas le dernier segment comme params [: id] au contrôleur lors de l'accès comme avec un slash:

www.mysite.com/members/membername/ 

routes râteau montre ceci:

/members/:id      {:action=>"showmember", :controller=>"users"} 
/members/:id      {:action=>"showmember", :controller=>"users"} 

C'est ce que j'ai essayé dans routes.rb:

map.connect 'members/:id/', :controller => "users", :action => "showmember", :requirements => {:id => /.*/} 
map.connect 'members/:id', :controller => "users", :action => "showmember", :requirements => {:id => /.*/} 

Répondre

2

Il est pour cette raison:

:requirements => {:id => /.*/} 

Vous dire la :id pour capturer un caractère. Vous pouvez l'empêcher d'attraper un personnage / en faisant quelque chose comme ceci:

:requirements => {:id => /[^\/]+/} 

[^\/] = tout caractère sauf / (le \ est d'échapper)

+ = au moins un caractère

* peut encore être utilisé à la place de + comme votre exemple, qui capturerait 0+ caractères à la place.

Vous pouvez ajouter des règles regex pour dire "seulement alphanumérique" ou quelque chose comme ça. Si vous voulez jouer plus avec votre chaîne regex, essayez d'utiliser http://rubular.com/

Questions connexes