2011-02-09 9 views
1

problem with routesを解決したらもう1つあります。Rails 3 route problem

私は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"} 
 

私はBinaryMuseさんのコメントに答えたよう...

+0

聞いている:あなたは、ルートを編集するため、サーバーを開始しましたか?もしそうなら、 'config/routes.rb'ファイルの内容を投稿できますか?ありがとう、幸運! –

+0

はい、何度も。しかし、私は問題を発見した。私はそれを難し​​い方法で学んでいます。私はRailsの巧妙さを過小評価しました...私は既存のエンティティを編集していますので、この場合は@user、レールは_methodを設定しています:put ....そう、私は私のルートに入れていません... –

答えて

1

、私は何が悪かったのか見つけた何かが欠けている...私がチェックFirebugでリクエストし、_method = putがPOSTで送信されていることがわかりました。 Railsの賢さは私が編集しているUser(@user)のインスタンスを検出したので、param _methodを使用してPOTSをPUTにデフォルト設定します。

私のルートでは:via配列のPUTメソッドがありません。

 

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