タイトルが示すように、私はdeviseを使用しています。これを行うプロセスを説明するこの リンクにたどり着きました。私はこのユーザーコントローラーを持っています:
def update_password
@user = User.find(current_user.id)
#raise @user.to_yaml
if @user.update_attributes(params[:user])
# Sign in the user by passing validation in case his password changed
sign_in @user, :bypass => true
#flash[:notice] = "Password Successfully Changed"
redirect_to settings_path
else
flash[:notice] = @user.errors.full_messages
render password_path
end
end
を無視し#raise @user.to_yaml
ます。そして、このビュー:
<h1>Change Password</h1>
<%= form_for(:user, :url => { :action => 'update_password'}) do |f| %>
<div>
<%= f.label :current_password %>
<%= f.password_field :current_password %>
</div>
<div>
<%= f.label :password %>
<%= password_field_tag :password %>
</div>
<div>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
</div>
<div>
<%= f.submit "Change Password" %>
</div>
<% end %>
私はこのコントローラーメソッドにマップされたそのビューを持っています:
def password
@user = current_user
end
アクションとビューを分離するには、私の config/routes.rb は次のとおりです。
match '/password' => 'users#password', :as => 'password'
フォームから [パスワードの変更] ボタンをクリックすると問題が発生します。これは、「http://localhost:3000/assets?action=update_password&controller=users」へのリンクで、「id=assets のユーザーが見つかりませんでした」というエラーが表示されます。
Webページの内容をコピーしたため、なぜこのように動作するのか、何が間違っているのかわかりません。誰かがこれについて何か経験があり、私を助けることができますか? ありがとう!