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

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

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

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

Q&A

解決済

1回答

1265閲覧

rails cocoon 親子孫 フォームによる同時送信

onichan

総合スコア5

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/25 11:14

前提・実現したいこと

Rails,cocoonを用いて親子孫関係のテーブルに複数のデータを同時保存を行おうとしています。
親:events 子:menus 孫:notes

発生している問題・エラーメッセージ

子までは保存成功しているのですが、孫がストロングパラメーターによりpermittされずに弾かれてしまいます。

Unpermitted parameter: :notes

該当のソースコード

events_controller.rb

class EventsController < UsersController before_action :set_event, only: [:show, :edit, :update, :destroy] before_action :move_to_index, except: [:index, :show] # GET /events # GET /events.json def index @all_events = Event.all.includes(:user) @user = User.find(current_user.id) #フォローしているユーザーを取得 @follow_users = @user.followings.map { |f| f[:id] } @follow_users << current_user.id #フォローユーザーのツイートを表示 @events = @all_events.where(user_id: @follow_users).order("created_at DESC") new end # GET /events/1 # GET /events/1.json def show @event = Event.find(params[:id]) end # GET /events/new def new @event = Event.new @menu = @event.menus.build @note = @menu.notes.build end # GET /events/1/edit def edit end # POST /events # POST /events.json def create index @event = Event.new(event_params) respond_to do |format| if @event.save format.html { redirect_to @event, notice: '記録完了' } format.json { render :show, status: :created, location: @event } else format.html { redirect_to root_path, notice: '※記録失敗(本文が空白です)' } format.json { render json: @event.errors, status: :unprocessable_entity } end end end # PATCH/PUT /events/1 # PATCH/PUT /events/1.json def update respond_to do |format| if @event.update(event_params) format.html { redirect_to @event, notice: '記録の変更完了' } format.json { render :show, status: :ok, location: @event } else format.html { render :edit } format.json { render json: @event.errors, status: :unprocessable_entity } end end end # DELETE /events/1 # DELETE /events/1.json def destroy @event.destroy respond_to do |format| format.html { redirect_to root_path, notice: '記録削除' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_event @event = Event.find(params[:id]) end # Only allow a list of trusted parameters through. def event_params params.require(:event).permit(:title, :body, :start_date, :end_date, :image, menus_attributes: [:name, :part, notes_attributes:[:number, :number_unit, :rep, :rep_unit]]).merge(user_id: current_user.id) end def move_to_index redirect_to action: :index unless user_signed_in? end end

event.rb

class Event < ApplicationRecord belongs_to :user validates :body, presence: true mount_uploader :image, ImageUploader # いいね has_many :likes has_many :liked_users, through: :likes, source: :user # メニュー has_many :menus accepts_nested_attributes_for :menus end

menu.rb

class Menu < ApplicationRecord belongs_to :event has_many :notes, dependent: :destroy accepts_nested_attributes_for :notes end

note.rb

class Note < ApplicationRecord belongs_to :menu end

_form.html.erb

<div class="NewRecord_Box"> <%= form_with(model: event, local: true) do |form| %> <% if event.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(event.errors.count, "error") %> prohibited this event from being saved:</h2> <ul> <% event.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :title %> <%= form.text_field :title %> </div> <div class="field"> <%= form.label :body %> <%= form.text_field :body, placholder: "トレーニングの記録を残そう!" , id: "body"%> </div> <div class="input"> <%= form.file_field :image, placeholder: "Image", id: "image" %> </div> <div class="field"> <%= form.label :menu %> <%= form.fields_for :menus do |menu| %> 種目名: <%= menu.text_field :name %> 部位: <%= menu.text_field :part %> <%= form.fields_for :notes do |note| %> 重さ: <%= note.text_field :number %> 回数: <%= note.text_field :rep %> <% end %> <% end %> </div> <div class="field"> <%= form.label :start_date %> <%= form.datetime_select :start_date %> </div> <div class="field"> <%= form.label :end_date %> <%= form.datetime_select :end_date %> </div> <div class="input"> <%= form.submit "WORK OUTを保存" , id: "Newrecord"%> </div> <% end %> </div>

試したこと

モデルの記述の確認
テーブル名が命名規則に乗っ取っていないのかと思い変えてみたが変わらず。
フォームの記述が間違っているのかと思い調べたが間違っていなさそう。

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.2
cocoon (1.2.14)

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

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

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

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

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

guest

回答1

0

ベストアンサー

<%= form.fields_for :notes do |note| %>

<%= menu.fields_for :notes do |note| %>

投稿2020/04/26 04:15

winterboum

総合スコア23567

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

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

onichan

2020/04/26 12:25

ありがとうございます!解決しました! もしよければ参考になるサイトなどございますでしょうか。 自分の調べた限りだと、文章の意味を正確に把握できておらず自分で書いておきながら他人に説明できない状態です。 大変恐縮ですが何卒よろしくお願いいたいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問