前提・実現したいこと
Railsでアプリ作成中です。
User/edit.html.erbのユーザー編集画面で、別モデルであるImagesのPOSTがモーダル上でできないことがわかりました。
UserモデルのPOSTは、モーダル上ででき、ImagesモデルのPOSTがモーダルでなければできることから、なにかしらRailsの機能としてモーダル上では別モデルの POSTができないようになっているのではないかと推測しています。
具体的にどこが原因なのか、Railsのどの仕様なのか教えていただけると嬉しいです。
- users/edit.html.erbのモーダル上でImagesモデルのフォームを送信
- image_controllerのcreateアクションへ
- DBに保存されリダイレクトされ元の画面へ。
上記の流れの中で、1のフォーム送信ボタンを押下後、image_controllerを通らずにusers/edit.html.erbに戻ってきてしまいます。
Imageモデルは、image_uploaderをmountしています。
発生している問題・エラーメッセージ
フォーム送信後、
URL
1localhost:3000/*****/edit?utf8=✓&authenticity_token=S08quUa**************************D&action=edit&route=users&idParams=3&image%5Bimage%5D=&commit=変更
のようなURLが発行されedit画面に戻ってきています。
該当のソースコード
users/edit.html.erb
erb
1 2<!-- 背景画像のモーダル開く部分 --> 3 <label class="cover-image img-responsive center-block open" data-toggle="modal" data-target="#coverimageModal" > 4 <% if @user.image %> 5 <%= image_tag(@user.image , :class => "user-cover-image") %> 6 <% else %> 7 <%= image_tag "default.jpg" , :class => "user-cover-image" %> 8 <% end %> 9 <i class="fa fa-camera fa-2x image-icon"></i> 10</label> 11 12<!-- 省略 --> 13 14<!-- 背景画像のモーダル --> 15 <div class="modal" id="coverimageModal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true"> 16 <div class="cover_overlay"></div> 17 <div class="modal-inner"> 18 <div class="inner"> 19 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 20 <span aria-hidden="true">×</span> 21 </button> 22 <form class="form-wrapper"> 23 <div class="contents-inner"> 24 <div class="contents-link"> 25 <div class="copy_result"> 26 <p class="copy-after-result" style="display: block;"> 27 カバー写真を編集する 28 </p> 29 30<!-- 以下フォーム内容 --> 31<%= form_for(@image, :url => {:controller => :images, :action => :create}, html: { multipart: true }) do |f| %> 32<!-- ajax処理で使う分のパラメータをhidden_fieldで持っておく --> 33 <%= hidden_field_tag "action", params[:action] %> 34 <%= hidden_field_tag "route", "users" %> 35 <%= hidden_field_tag "idParams", @user.id %> 36 37 <label class="copy-after-btn cover-btn-edit"> 38 <%= f.file_field :image , accept: 'image/*', :style=>"display:none;", id: 'image_img', class: "icon" %> 39 40 <p>写真を選択</p> 41 </label> 42 <div class="cover-image-preview"> 43 <div id="img_field" onClick="$('#image_img').click()" > 44 <img id="image_img_prev" src="#" class='hidden cover-image-preview-inner' /> 45 <%= image_tag(@image.image ,:class => "cover-image-preview-inner image_present_img")%> 46 </div> 47 </div> 48</div> 49 <%= f.submit "変更", class: "btn submit_btn" %> 50<% end %> 51 52<!-- 省略 --> 53
試したこと
Users/edit/html/erbのフォームを限りなくシンプルにしたり、form_tagに変えてみたりしましたがどれも全く同じ挙動になりました。そのため、画像送信やフォームが原因ではなく、モーダル上であることが原因だと推測しています。
補足情報(FW/ツールのバージョンなど)
ルーティングもコントローラーも設定しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/22 18:33