現状と問題
現在railsでツイッタークローンアプリを作成しております。
ユーザー詳細画面にて編集機能を非同期処理のmodalウインドウにて実装しているのですが、変更をした後にupdateは非同期で行われるのですが、
編集フォームがそのまま画面に埋め込まれてしまうということが起きています。
参考のGIFを載せさせていただきます。
該当コード
UserShowHTML
1<%= link_to "プロフィール編集", edit_user_path(@user), remote: true, class: "btn btn-primary w-auto mt-2" %> 2<div id="user-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"></div>
edithtmlerb
1//formの_edit.html.erbです。 2<div class="modal-dialog"> 3 <div class="modal-content"> 4 <h3>プロフィールを編集</h3> 5 <%= form_with model: @user, url: user_path, method: :patch, remote: true do |f| %> 6 <div class="field"> 7 <%= attachment_image_tag @user, :profile_image, format: 'jpeg', size: "100x100" %> 8 <%= f.attachment_field :profile_image, :placeholder => "プロフィール画像" %> 9 </div> 10 <div class="field"> 11 <%= f.label :name %><br /> 12 <%= f.text_field :name, autofocus: true %> 13 </div> 14 <div class="field"> 15 <%= f.label :自己紹介 %><br> 16 <%= f.text_area :introduction, autofocus: true %> 17 </div> 18 <%= f.submit "保存", class: "btn btn-primary" %> 19 <% end %> 20 </div> 21</div>
editjserb
1//formのlink_toでremoteをつけることでedit.js.erbが読み込まれモーダルウインドウを表示させる 2$("#user-modal").html("<%= escape_javascript(render 'edit') %>"); 3$("#user-modal").modal("show");
updatejserb
1//update,モーダルウインドウを閉じる処理 2$(".introduction").html("<%= j(render("edit", user: @user)) %>"); //おそらくここで問題? 3$("#user-modal").modal("hide");
UserController
1class UsersController < ApplicationController 2 3 before_action :authenticate_user!, except: [:index] 4 5 def edit 6 @user = User.find(params[:id]) 7 end 8 9 def update 10 @user = User.find(params[:id]) 11 respond_to do |format| 12 if @user.update(user_params) 13 format.js { @status = "success"} 14 else 15 render "edit" 16 format.js { @status = "fail"} 17 end 18 end 19 end 20 21 private 22 23 def user_params 24 params.require(:user).permit(:name, :introduction, :profile_image) 25 end 26 27end
実装時に参考にさせていただいた記事はこちらです。
やってみたこと
.js.erbの処理を一つずつ削除して問題のある箇所は$(".introduction").html("<%= j(render("edit", user: @user)) %>"); ではないかというところまで来ましたが、引数に何を渡すべきなのかというところで躓いています。
もちろん他の部分でもミスがあるかもしれません。
何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー