Rails 3路由:命名路由."没有路线匹配"

Gro*_*ain 1 routing named-routing ruby-on-rails-3

所以我得到了一个'No route matches'错误,并且对Rails 3(以及一般的Rails)不熟悉,我真的不知道问题是什么.以下是相关路线:

resources :users
#...
match 'reset_password(/:reset_password_code)' => 'users#reset_password', :as => :reset_password, :via => :get
match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :post
Run Code Online (Sandbox Code Playgroud)

GET方法工作正常.当在get页面上生成的表单POST时,我收到路由错误,就像这样开始.

<%= form_for @user, :url => reset_password_url do |f| %>
Run Code Online (Sandbox Code Playgroud)

看起来像它的发布到正确的位置,如使用"reset_password_url",它的发布到它生成的URL和URL看起来应该......人有什么想法?

UPDATE

  • 我正在使用Rails 3.0.4
  • 除了我在这里提到的那些之外,我已经尝试取出所有其他路线,但我仍然无法弄清楚为什么它不起作用.

Gro*_*ain 6

弄清楚了!

在我的形式中,rails(正确地)假设因为我有一个用户使用form_for帮助器,我想更新用户,而不是创建一个新用户.

因此,它使用PUT方法发布我的表单.要解决路由问题,我只需要将最后一条路由更改为:

match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :put
Run Code Online (Sandbox Code Playgroud)

我在webkit中使用Web Inspector查看整个请求之后才发现问题,并查看了正在发送的_ method参数.

  • 同样的事情发生在我身上.我没有将动词从'post'更改为'put',而是将form_for从'form_for @user'更改为'form_for:user' (2认同)