Rails 3路由问题

时间:2011-02-09 22:00:30

标签: ruby-on-rails ruby-on-rails-3 jrubyonrails

在解决了另一个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"}

我错过了什么......

1 个答案:

答案 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