1

在解决了路由的另一个问题之后,现在我有了另一个问题。

我的 routes.rb 中有这条路线:


match "user/create_new_password/:reset_password_key" =>"users#create_new_password", :via=>[:post, :get], :as=>:create_new_password

我可以像这样在我的功能测试中测试它:


test "should create new password " do
    post :create_new_password, {:user=>{:password=>"123456", :password_confirmation=>"123456"}, :reset_password_key=>user.reset_password_key}
end

在我看来,我有以下形式:


=simple_form_for @user, :url=>create_new_password_path do |f|
    =f.input :password, :label=>I18n.t("activerecord.attributes.user.email")
    =f.input :password_confirmation, :label=>I18n.t("activerecord.attributes.user.password_confirmation")
    =f.submit I18n.t "activerecord.actions.user.create_new_password"


当我提交表格时,我得到:


No route matches "/user/create_new_password/OqQxYTgjYKxXgvbAsTsWtMnIpMOpsjCRzLGZmJZLSbYtjvcvdpO"

大字符串是reset_password_key。

我已经在功能测试中使用相同的 reset_password_key 值对其进行了测试。

rake 路由的相关输出是:


create_new_password POST|GET /user/create_new_password/:reset_password_key(.:format) {:controller=>"users", :action=>"create_new_password"}

我错过了一些东西...

4

1 回答 1

1

正如对 BinaryMuse 评论的回答,我发现出了什么问题......我在 firebug 中检查了请求,发现 _method=put 正在与 POST 一起发送。Rails 聪明地检测到我正在编辑用户 (@user) 的现有实例,因此它使用 param _method 将 POTS 默认为 PUT。

问题是在我的路线中,我没有 PUT 方法在 :via 数组中。刚改成:


 match "user/create_new_password/:reset_password_key" =>"users#create_new_password",:via=>[:get, :put], :as=>:create_new_password

在控制器中:


def create_new_password
   if request.put?
      #change password
   else
     #render template
   end

end

于 2011-02-10T00:38:32.593 回答