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

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

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

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

Ruby

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

780閲覧

モーダルからAjaxでPOSTリクエストが送れない

kioak

総合スコア20

Ruby on Rails 5

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

Ruby

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2019/05/11 17:53

環境

Ruby 2.6.0
Rails 5.2
Bootstrap 4

やりたいこと

Railでアプリを作っています。
font-awesomeのマークを押すと、編集画面(モーダル)が開き、そこに文字を入力して保存出来る状態が理想です。

イメージ説明

この画像で言えば、Modal body text goes here.という入力したテキストを投稿の内容としてsave changesを押した時に保存したいです。(post.contentというPostモデルのcontentカラム)

users/users/:id ページにおいて、ユーザーは post(投稿)を複数持っています。

困っていること

users/users/:id というURLでこの処理を行おうとしていますが、リンク先の問題でエラーが生じます。

haml

1= link_to posts_post_path(post.id), :class => "add_comment", :remote => "true" do 2 %i.fa.fa-edit{data: {toggle: "modal", target: "#modal_" + post.id.to_s}}

モーダルの開く先をこのように指定すると、マウスを載せた時のリンク先はposts/posts/:idとなり、正しそうに見えます。
しかし、こうするとモーダルが開かなくなります。。

haml

1%span{:class => "add_comment", :remote => "true"} 2 %i.fa.fa-edit{data: {toggle: "modal", target: "#modal_" + post.id.to_s}}

このようにspanにすると、モーダルは開きますが、その後テキストを入力して保存を押すと

NO ROUTE MATCHusers/users/:id [POST]

のエラーが出てきます。

コード

以下該当するところのコードです。

haml

1%span{:class => "add_comment", :remote => "true"} 2 %i.fa.fa-edit{data: {toggle: "modal", target: "#modal_" + post.id.to_s}}

haml

1- if post && current_user 2 .modal{aria: {hidden: "true", labelledby: "exampleModalCenteredLabel"}, :id => "modal_" + post.id.to_s, :role => "dialog", :tabindex => "-1"} 3 .modal-dialog.modal-dialog-centered{:role => "document"} 4 .modal-content 5 .modal-header 6 %h5#exampleModalCenteredLabel.modal-title.mb-4 7 = post.product.title 8 - post.errors.full_messages.each do |message| 9 = message 10 .modal-body.text-center 11 = form_for posts_posts_url, html: { class: 'form js-form form-group' }, remote: true do |f| 12 = f.text_field class: 'form__text-field js-form__text-field form-control', rows: '5', placeholder: '例) 商品の感想など', value: params[:content] 13 .modal-footer 14 %button.btn.btn-secondary{"data-dismiss" => "modal", :type => "button"} Close 15 = f.submit class: 'form__submit js-submit btn btn-primary'

js

1$(document).on('turbolinks:load', function () { 2 $('.add_comment').on('submit', function(e) { 3 e.preventDefault(); 4 var textField = $(post.content); 5 var content = textField.val(); 6 $.ajax({ 7 type: 'POST', 8 url: '/posts.json', 9 data: { 10 post: { 11 content: content 12 } 13 }, 14 dataType: 'json' 15 })//ajax 16 }); 17})

hamlのインデントはマークダウンでずれるせいで、変になってるかもしれません。

よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

直接的な回答じゃなくて申し訳ないのですが、Rails+Modalで作ったときに参考にしたサイトを共有させていただきます。
Bootstrapのモーダルを利用して、AJAXはRails標準のremote: trueを利用しています。
こちらに沿って作ればJavaScriptはほとんど記載しなくても、希望されていることができるかと思います。

https://qiita.com/niwaken/items/ffbce52fb024fd369f24

投稿2019/05/12 17:43

no1knows

総合スコア3365

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

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

kioak

2019/05/13 16:56 編集

ご回答ありがとうございます! コントローラの階層を変えて対応させなんとか解決させました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問