【実現したいこと】
1.cocoonを利用して、1対多モデルのフォームのボタンを追加させたい
2.cocoonのやり方に従い、<%= render 'output_fields', f: output %>
と記述して別ファイルでrender部分を記述すると確かに動くが、1つのファイルでまとめて記述するとjQueryが効かなくなるため、原因を知って解決したい
【起こっていること】
「追加」ボタンの実装ですが、ファイルを分けると反応しますが、1つのファイルに同じ内容を記述する場合だと何も反応しない
【参考記事】
Cocoonで親子(孫)関係で、動的にフォームを追加削除する
【環境】
Ruby:2/6.5
Rails:5.2.4.3
gem cocoon使用
【コード】
_form.html.slim
slim
1 .form-group 2 h3 今日できるようになったこと・成果 3 #outputs 4 = f.fields_for :outputs do |output| 5 .nested-fields 6 .form-group.form-group-flex 7 = output.text_area :output_name 8 #links 9 = link_to_remove_association "削除",f, class: 'btn btn-danger' 10 = link_to_add_association '追加',f, :outputs, class: 'btn btn-primary'
_output_fields.html.slim
.nested-fields .form-group.form-group-flex = f.text_area :output_name #links = link_to_remove_association "削除", f, class: 'btn btn-danger'
applicaiton.js
JavaScript
1//= require jquery3 2//= require popper 3//= require bootstrap-sprockets 4//= require activestorage 5//= require moment 6//= require moment/ja.js 7//= require jquery 8//= require Chart.min 9//= require rails-ujs 10//= require cocoon 11//= require_tree .
new.html.slim
slim
1h1 新規登録 2= render 'form', model: @record 3= link_to '一覧に戻る', root_path, class: 'btn btn-primary'
records_controller.rb
Ruby
1class RecordsController < ApplicationController 2 3 def index 4 @records = current_user.records.includes(:practices).page(params[:page]).per(8) 5 end 6 7 8 def new 9 @record = Record.new 10 output = @record.outputs.build 11 practice = @record.practices.build 12 task = @record.tasks.build 13 end 14 15 def record_params 16 params.require(:record).permit(:record_id, :training_date, :learning_point, outputs_attributes:[:output_name, :id], practices_attributes:[:practice_item, :practice_time, :id], tasks_attributes:[:task_name, :id]).merge(user_id: current_user.id) 17 end 18end
あなたの回答
tips
プレビュー