質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2022閲覧

Rails Users/edit.html.erbのモーダル上で別モデルのPOSTができない件。

Romay

総合スコア40

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/03/20 19:18

前提・実現したいこと

Railsでアプリ作成中です。

User/edit.html.erbのユーザー編集画面で、別モデルであるImagesのPOSTがモーダル上でできないことがわかりました。
UserモデルのPOSTは、モーダル上ででき、ImagesモデルのPOSTがモーダルでなければできることから、なにかしらRailsの機能としてモーダル上では別モデルの POSTができないようになっているのではないかと推測しています。

具体的にどこが原因なのか、Railsのどの仕様なのか教えていただけると嬉しいです。

  1. users/edit.html.erbのモーダル上でImagesモデルのフォームを送信
  2. image_controllerのcreateアクションへ
  3. 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">&times;</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/ツールのバージョンなど)

ルーティングもコントローラーも設定しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Ruby

1<%= form_for(@image, :url => {:controller => :images, :action => :create}, html: { multipart: true }) do |f| %> 2

この箇所は出力されるhtmlではどのようになっていますでしょうか?
ヒントになるのではないかと思います。

投稿2019/03/21 07:53

ReiLeiLei1025

総合スコア236

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Romay

2019/03/22 18:33

コメント遅れまして申し訳ありません。モーダルでの実装をやめ、違う方法で実装いたしました。 今回はこれにて質問を閉じさせていただきます。コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問