前提・実現したいこと
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)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/26 12:25
2020/04/26 13:14