当用户名中有@符号时,Rails,route_path会中断

时间:2011-09-13 20:20:00

标签: ruby-on-rails ruby-on-rails-3 routes username

只要用户名中包含@符号,我就会收到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 个答案:

答案 0 :(得分:3)

由于@,您的路线没有因为.而中断。 Rails会看到.,并认为您正在尝试指定格式(即.html.xml,...)。您需要通过使用以下内容更新路线来稍微改变自动格式检测的内容:

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

:constraints应该解决您的路由问题(您对Rails 2使用:requirements。)