设计创建时髦的编辑用户密码路径

ran*_*its 1 ruby ruby-on-rails devise ruby-on-rails-4

我正在遵循所有关于如何允许用户在没有解决方案2中的注册表单的情况下更改密码的说明:

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password

我也相应地更新了我的编辑表格,以反映新的 user_registration_path

<%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name), :html => { :method => :put }) do |f| %>
Run Code Online (Sandbox Code Playgroud)

该路径显示在rake路线中.我没有得到的是表单呈现时,它呈现如下:

<form accept-charset="UTF-8" action="/users.user" class="edit_user" id="edit_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="D3ZBYyAfI+sXMsJiKy5+ZsjcISg8yqKTDAdXQm6Heqs=" /></div>
Run Code Online (Sandbox Code Playgroud)

这个动作是什么/users.user?当我在编辑表单上点击"更新"并且我不确定从哪里生成此操作时,这会让我失望.我的routes.rb有这个:

devise_for :users, :skip => [:registrations]                                          
    as :user do
      get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'    
      put 'users' => 'devise/registrations#update', :as => 'user_registration'            
    end
Run Code Online (Sandbox Code Playgroud)

我得到的最终错误如下:

ActionController::UnknownFormat in Devise::RegistrationsController#update 
Run Code Online (Sandbox Code Playgroud)

Dig*_*ora 6

user_registration_path的任何参数似乎都没有.因为无论如何你都给它一个,它被解释为一种格式(如RSS或XML).这会导致UnknownFormat错误,因为您的更新操作不会处理不存在的"user"格式.

解决方案:只需resource_nameuser_registration_path调用中删除参数即可.