前提・実現したいこと
プログラミング初学者です。
Rails(5.2.4.4)でレシピ共有サイトを制作しているのですが、
fileds_forを使った投稿機能の実装にてこずっています。
フォーム入力、送信の実行までは動作するのですが、
親モデル(Recipe)に関連付けした子モデル(RecipeIngredient,RecipeStep)がDBに保存されません。
どなたかお力添えいただけると幸いです。
発生している問題・エラーメッセージ
送信後、ターミナルで以下のようなメッセージが出ます。
その後、親モデルのデータのみ保存しているようです。
recipe_paramsの書き方が問題でしょうか。
Unpermitted parameters: :recipe_ingredient, :recipe_step
該当のソースコード
recipes_controller.rb
Ruby
1 def new 2 @recipe = Recipe.new 3 @recipe.recipe_ingredients.build 4 @recipe.recipe_steps.build 5 end 6 7 def create 8 recipe = Recipe.new(recipe_params) 9 recipe.user_id = current_user.id 10 recipe.save 11 redirect_to recipe_path(recipe) 12 end 13 14 private 15 def recipe_params 16 params.require(:recipe).permit( 17 :title, :body, :recipe_image, 18 recipe_ingredients_attributes: [:id, :ingredient, :quantity, :_destroy], 19 recipe_steps_attributes: [:id, :step, :step_image, :_destroy] 20 ) 21 end
recipes/new.erb
Ruby
1 <h5>レシピ名</h5> 2 <%= f.text_field :title, size: 60, placeholder: "20文字以内で入力してください" %> 3 <h5>ひとこと</h5> 4 <%= f.text_area :body, size: "60x2" %> 5 <h5>材料</h5> 6 <%= f.fields_for :recipe_ingredient, @recipe.recipe_ingredients.build do |ingredient| %> 7 <%= ingredient.text_field :ingredient %> 8 <%= ingredient.text_field :quantity %> 9 <% end %> 10 <h5>作り方</h5> 11 <%= f.fields_for :recipe_step, @recipe.recipe_steps.build do |step| %> 12 <%= step.attachment_field :step_image %> 13 <%= step.text_area :step %> 14 <% end %> 15 16 <%= f.submit 'レシピを公開する' %>
models/recipe.rb
Ruby
1class Recipe < ApplicationRecord 2 3 belongs_to :user 4 5 has_many :recipe_ingredients, dependent: :destroy 6 accepts_nested_attributes_for :recipe_ingredients 7 8 has_many :recipe_steps, dependent: :destroy 9 accepts_nested_attributes_for :recipe_steps 10 11 attachment :recipe_image 12 13 validates :title, presence: true 14 validates :body, presence: true 15 validates :recipe_image, presence: true 16 17end
質問内容に不備、わかりづらい箇所があればご指摘いただければと思います。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/09 10:22 編集
2020/11/09 11:03
2020/11/09 13:02
2020/11/09 13:08