我正在玩一个测试轨道应用程序。但是我偶然发现了一个我无法解决的问题。 我有一个用户控制器,其中有一个激活方法。
在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"}
我尝试搜索此问题,但通常会在您忘记传递构建路径所需的对象时发生这种情况。
感谢所有帮助:)
答案 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名称,但必须进行验证。