在解决了另一个problem with routes 之后,现在又有了另一个。{/ p>
我的路线中有这条路线.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 :(得分:1)
回答BinaryMuse的评论,我发现了什么问题......我在firebug中检查了请求,发现在POST时发送了_method = put。 Rails聪明检测到我正在编辑用户(@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