1

Ruby on Rails プロジェクトでは、devise を認証プラグインとして使用しています。プロジェクトにパスワード変更機能を追加しましたが、フォームを送信するとエラーが発生しますNo route matches "/users/update_password"

これは私の更新パスワードコードです

  def update_password
    @user = User.find(current_user.id)
    if @user.update_attributes(params[:user])
      # Sign in the user by passing validation in case his password changed
      sign_in @user, :bypass => true
      redirect_to root_path
    else
      render "edit"
    end
  end

これは私のルートの詳細です

resources :users, :only => [] do
        collection do
            get 'current'
            get 'edit'
            post 'update_password'
        end
    end

これが私の編集フォームです

<div id="loginForm">
    <div id="loginHeader"><h3>Change Password</h3></div>
    <div id="loginContent">
        <%= form_for(@user, :url => { :action => "update_password" }) do |f| %>
            <p><%= f.password_field :current_password, :class => "login_txt", :placeholder => "We need your current password to confirm your changes", :autocomplete => "off" %></p>
            <p><%= f.password_field :password, :class => "login_txt", :placeholder => "New password", :autocomplete => "off"  %></p>
            <p><%= f.password_field :password_confirmation, :class => "login_txt", :placeholder => "Confirm password", :autocomplete => "off" %></p>
            <p>
                <input id="user_submit" name="commit" type="submit" value="Update Password" class="login_btn" /> 
            </p>
        <% end %>
    </div>
</div>

誰でもこの問題を解決する方法を教えてもらえますか

どうもありがとう

4

1 に答える 1

2

コレクション ( ) で POST アクションとしてroutes.rb定義しますが、フォームでは、既に存在するため、に渡すときに暗黙的に PUT アクションとして定義しています。update_password/users/update_password@userform_for@user

私はこれをテストしていませんが、コレクションのルートを POST から PUT に変更すると、これが修正されるはずです。

resources :users, :only => [] do
  collection do
    get 'current'
    get 'edit'
    put 'update_password'
  end
end

関連項目: Rails 3.0.10、カスタマー ルート、post および form_for タグ

于 2012-08-06T05:21:35.390 に答える