Rails, route_path обрывается, когда в имени пользователя есть символ @ - PullRequest
2 голосов
/ 14 сентября 2011

Я получаю RoutingError всякий раз, когда в имени пользователя есть символ @:

No route matches {:controller=>"users", :action=>"show", :username=>"abc@shin.com"}

Мои маршруты выглядят так:

match 'users/:username' => 'users#show', :as => :show_other_user

И мой взгляд:

<% for user in @users %>
  <tr>
    <td><%= image_tag avatar_url(user, 50) %></td>
    <td><%= link_to user.name, show_other_user_path(:username => user.username) %></td>
    <td><%= common_friends(current_user, user).size %></td>
  </tr>
<% end %>

Все работает, если имя пользователя не имеет символа @.

1 Ответ

3 голосов
/ 14 сентября 2011

Ваш маршрут не нарушается из-за @, он прерывается из-за .. Rails увидит . и подумает, что вы пытаетесь указать формат (т.е. .html, .xml, ...). Вам нужно немного поковыряться в обнаружении автоформатирования, обновив ваш маршрут примерно так:

match 'users/:username' => 'users#show', :as => :show_other_user, :constraints => { :username => /.*/ }

:constraints должен решить ваши проблемы с маршрутизацией (вы бы использовали :requirements для Rails 2).

...