2011-02-09 128 views
1

解決了其他problem with routes後,現在我有另一個。Rails 3路由問題

我在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的相同值對它進行了測試。

進行耙路線相關的輸出是:

 

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

我失去了一些東西......

+0

不得不問:你開始,因爲編輯路由服務器?如果是這樣,你可以發佈你的`config/routes.rb`文件的內容嗎?謝謝,祝你好運! – 2011-02-10 00:06:04

回答

1

至於回答到BinaryMuse的評論,我發現了什麼問題?我查了請求在螢火蟲,並發現_method = put與POST一起發送。 Rails的聰明性檢測到我正在編輯用戶(@user)的現有實例,因此它使用參數_method將POTS默認爲PUT。

問題是,在我的路線中,我沒有在通過數組中的方法PUT。剛改爲:

 

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

和Controller:

 

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

end