前提・実現したいこと
AJAXで非同期通信を実装したいのですが、
入力フォームが複数あるためか、うまくコードを書くことができていません。
該当のソースコード
view
1//new.html.haml 2= form_with(model: [@group, @panel], html: { class: 'js-form' }, local: true) do |form| 3 .SettingFolderForm__input 4 .leftField 5 = form.label 6 = form.text_area :question 7 .centerField 8 = form.label 9 = form.text_area :answer 10 .rightField 11 = form.submit
controller
1def create 2 @panel = @group.panels.new(panel_params) 3 if @panel.save 4 respond_to do |~format| 5 format.json 6 end 7end 8 9def pane_params 10 params.require(:panel).permit(:question, :answer).merge(user_id: current_user.id) 11end
確認したいこと、試したこと
1.データ取得のためにはどう考えたら良いか?
2.複数データを取り扱うための、ajaxのdataの記述に関して
1: 複数の入力フォームがあることから、今のところ.mapを使ってデータを取得するようなコードを書いていますが、mapを使うと多重でない配列データになり、別々のカラムに保存するajaxのdataの記述をどうしたら良いかが検討つかなくなります。
js
1$(function() { 2 $('.js-form').on('submit', function(e) { 3 e.preventDefault(); 4 let panel = $('.SettingFolderForm__input').map(function (index, el) { 5 return $(this).val(); 6 }); 7 console.log(panel); 8 $.ajax({ 9 url: '/groups/:group_id/panels/new.json', 10 type: 'POST', 11 data: { 12 panel: { //ここからもう書けなくなる 13 question:, answer: panel 14 } 15 }, 16 dataType: 'json', 17 }) 18 }) 19});
viewファイルのインプット部位にクラス名をそれぞれ設定して、jsも別々に記述してデータをそれぞれのカラムに入れてやるように書きかえるとなると下記のようになるかなと考えましたが、これだとPOST NOT FOUND
js
1$(function() { 2 $('.js-form').on('submit', function(e) { 3 e.preventDefault(); 4 let panel = ""; 5 let panel1 = $('.leftInput').val(); 6 let panel2 = $('.rightInput').val(); 7 $.ajax({ 8 url: '/groups/:group_id/panels/new.json', 9 type: 'POST', 10 data: { 11 panel: { 12 question: panel1, 13 answer: panel2 14 } 15 }, 16 dataType: 'json', 17 }) 18 }) 19});
panelを定義する際に、ハッシュキーの入った配列になっている必要があると思うのですが、
回答2件
あなたの回答
tips
プレビュー