【问题标题】:Rails 3 Routes: Named routes. "No route matches"Rails 3 Routes:命名路线。 “没有路线匹配”
【发布时间】:2011-07-09 09:39:39
【问题描述】:

所以我收到“无路由匹配”错误,并且是 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

GET 方法工作正常。当在 get 页面上生成的表单 POST 时出现路由错误,它以这样的方式开始。

<%= form_for @user, :url => reset_password_url do |f| %>

看起来好像它正在发布到正确的位置,因为 url 是使用“reset_password_url”生成的,它正在发布到它,并且 url 看起来应该......有人有什么想法吗?

更新

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

【问题讨论】:

  • 嗨,我刚刚测试了你的代码,它工作正常...你检查过表单上的方法是否真的是发布的?您是否尝试重新启动服务器以加载新路由?请记住,表单的操作 URL 中不能有任何重置代码。
  • 生成的表单的开始标签是:
    localhost:3000/reset_password" class="edit_user" id="edit_user_1" method="发布">
  • 如果它适合您,那么我的路线中肯定有其他事情发生。至少它适用于 somebody :)

标签: ruby-on-rails-3 routing named-routing


【解决方案1】:

想通了!

在我的表单中,rails (正确地)假设由于我有一个与 form_for 助手一起使用的用户,我想更新用户,而不是创建一个新用户。

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

match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :put

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

【讨论】:

  • 同样的事情发生在我身上。我没有将动词从“post”更改为“put”,而是将 form_for 从“form_for @user”更改为“form_for :user”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2017-07-13
相关资源
最近更新 更多