前提・実現したいこと
学習のためにrailsを使い、簡単なクローンサイトを作っている途中なのですが、パスワード変更フォームをモデルと関連付けない形で作成したいと考え、form_wothヘルパーを使いフォームを作ったのですが、うまく想定したルートに乗せることが出来ず、反応させたいアクションがうまく作動しません、どうすればいいのかアドバイスが欲しいです
発生している問題・エラーメッセージ
view側(edit.html.erb)
<div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_with(url: password_change_path(@user.id),local:true,method: patch) do |f| %> <%= render 'shared/error_messages' %> <%= hidden_field_tag :email, @user.email %> <%= f.label :current_password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :new_password %> <%= f.password_field :new_password, class: 'form-control' %> <%= f.label :new_password_confirmation, "Confirmation" %> <%= f.password_field :new_password_confirmation, class: 'form-control' %> <%= f.submit "Update password", class: "btn btn-primary" %> <% end %> </div>
routes側
edit_password_change GET /password_changes/:id/edit(.:format) password_changes#edit password_change PATCH /password_changes/:id(.:format) password_changes#update
controller側
class PasswordChangesController < ApplicationController def edit @user = User.find(params[:id]) end def update @user= User.find_by(email: params[:email]) new_pass = params[:new_password] pass_confirmation = params[:new_password_confirmation] if @user if new_pass == pass_confirmation @user.password = new_pass if @user.save flash[:success]="パスワードの変更に成功しました" redirect_to @user else render "edit" end else flash.now[:danger]="確認用パスワードが違います" render "edit" end else flash.now[:danger]="現在のパスワードが違います" render "edit" end end end
サーバーの反応
ActionController::RoutingError (No route matches [POST] "/password_changes/1"):
↑ここのHTTPリクエストをupdateアクションを反応させるため[post]ではなく[patch]にしたいです。
試したこと
ネットで色々と検索してみて:methodオプションでリクエストを変更できるという記述を見つけたので、patchにしてみたのですが、それでもサーバーの反応を見るとpostリクエストになってしまうみたいで詰まってしまい、質問させていただきました。
上記のコードも独学で得た知識を使っているので、あまり美しくない出来かもしれませんが、どうかお力添え願います。
補足情報(FW/ツールのバージョンなど)
ruby2.6.3 rails 5.1.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/16 01:26 編集