Rails 3.1没有路由匹配控制器和操作,但它们存在

时间:2011-11-10 15:14:55

标签: ruby-on-rails-3 routes

我正在玩一个测试轨道应用程序。但是我偶然发现了一个我无法解决的问题。 我有一个用户控制器,其中有一个激活方法。

在routes.rb文件中我有

match 'activate/:email/:validation_code' => 'users#activate', :as => :activate_user, :via => :get

之后我尝试使用activate_user_path(@user),但会引发路由错误。

No route matches {:controller=>"users", :action=>"activate", :email=>#<User id: 12, email: "someone@test.test", validation_code: "zbBPLQUsBgPvEJfcjxmXuxFxuJAKEoqQNASkbybihpnmzSbhxdC...", active: false, created_at: "2011-11-10 14:56:23", updated_at: "2011-11-10 14:56:23">}

正在运行rake routes会显示路由:

activate_user GET /activate/:email/:validation_code(.:format) {:controller=>"users", :action=>"activate"}

我尝试搜索此问题,但通常会在您忘记传递构建路径所需的对象时发生这种情况。

感谢所有帮助:)

2 个答案:

答案 0 :(得分:1)

我会确保你实际上是在调用GET而不是POST作为方法。

如果您要提交表单,则默认为POST,这意味着您没有匹配的路由,上面列出的路由仅适用于GET请求。

答案 1 :(得分:0)

activate_user_path(:email =&gt; @ user.email,:validataion_code =&gt; @ user.validation_code)是否适合您?

修改

我不知道为什么,但是当我改变时: validation_code来编码它的工作原理。

match 'activate/:email/:code' => 'users#activate', :as => :activate_user, :via => :get

可能在rails中你不能在带有下划线的路由中使用var名称,但必须进行验证。