前提・実現したいこと
ruby on rails の環境でgem "cocoon"を使用して一対多の関係のモデルを同時に保存したい。
発生している問題・エラーメッセージ
フォームに入力した内容が登録されない
Started POST "/goals" for 172.22.0.1 at 2021-06-14 03:07:07 +0000 Cannot render console from 172.22.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by GoalsController#create as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>"WRLgldSJ8fdtds5dQ2fIeVg8f8Pntonoe94WPzxHxwHVZSTL518WoJ4IbLBpl1yL7mmSIGvj60JxZCVpU5gDsA", "goal"=>{"content"=>"asdf", "start_date"=>"2021-06-14T12:06", "end_date"=>"2021-06-15T12:06", "result"=>"1", "tasks_attributes"=>{"0"=>{"content"=>"asdf", "action"=>"asdf", "start_date"=>"2021-06-14T12:06", "end_date"=>"2021-06-15T12:07", "status"=>"1", "_destroy"=>"false"}}}, "commit"=>"作成"} (0.5ms) BEGIN ↳ app/controllers/goals_controller.rb:31 User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ app/controllers/goals_controller.rb:31 CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ app/controllers/goals_controller.rb:31 (0.6ms) ROLLBACK ↳ app/controllers/goals_controller.rb:31 保存失敗しました!!!!!!!! Completed 500 Internal Server Error in 100ms (ActiveRecord: 5.0ms) ArgumentError (wrong number of arguments (given 0, expected 2)): app/controllers/goals_controller.rb:36:in `create'
該当のソースコード
ruby
1[goal.rb] 2class Goal < ApplicationRecord 3 has_many :tasks, inverse_of: :goal 4 accepts_nested_attributes_for :tasks, allow_destroy: true 5 6 validates :user_id, presence: true 7 validates :content, presence: true 8 validates :result, presence: true 9end 10 11[task.rb] 12class Task < ApplicationRecord 13 belongs_to :goal 14 15 validates :goal_id, presence: true 16 validates :user_id, presence: true 17 validates :content, presence: true 18 validates :action, presence: true 19 validates :status, presence: true 20end 21 22[goals_controller.rb] 23 def new 24 @goal = Goal.new 25 @task = @goal.tasks.build 26 end 27 28 def create 29 @goal = Goal.new(goal_params) 30 31 if @goal.save 32 logger.debug "保存成功しました!!!!!!!!" 33 redirect_to "/", notice: "目標を作成しました" 34 else 35 logger.debug "保存失敗しました!!!!!!!!" 36 logger.debug @goal.errors.full_message 37 render new_goal_path 38 end 39 end 40 41 private 42 43 def goal_params 44 params.require(:goal).permit(:content, :start_date, :end_date, :result, 45 tasks_attributes: [:id, :content, :action, :start_date, :end_date, :status, :_destroy]) 46 .merge(user_id: 1, 47 tasks_attributes: [user_id: 1])# for develop 48 end 49end
ログイン機能は作成中のため、「user_id: 1」で固定値を入力しています。
html
1[new.html.erb] 2 <%= form_with model: @goal do |f| %> 3 <div class="goal-table"> 4 <p> 目標:<%= f.text_field :content, placeholder: "達成したいこと" %> </p> 5 <p> 開始日:<%= f.datetime_field :start_date %> </p> 6 <p> 終了日:<%= f.datetime_field :end_date %> </p> 7 <p> ステータス:<%= f.select :result, GoalState.all.collect { |a| [a.state, a.id] } %></p> 8 <div class="under-line"></div> 9 10 <%= f.fields_for :tasks do |t| %> 11 <%= render "task_fields", f: t %> 12 <% end %> 13 14 <div id="detail-association-insertion-point"></div> 15 16 <%= link_to_add_association "+課題を追加", f, :tasks, 17 class: "btn-task-add btn btn-secondary", 18 data: { 19 association_insertion_node: '#detail-association-insertion-point', 20 association_insertion_method: 'after' 21 } %> 22 </div> 23 <%= f.submit "作成", class: "btn btn-primary" %> 24 <%= link_to "キャンセル", goals_path, class: "btn btn-danger" %> 25 <% end %> 26 27 28[_task_fields.html.erb] 29<div class="nested-fields"> 30 <div class="task-form-area"> 31 <div> 32 <p> 課題:<%= f.text_field :content, placeholder: "目標に対する課題" %> </p> 33 <p> アクション:<%= f.text_field :action, placeholder: "課題を解決するための行動" %> </p> 34 <p> 開始日:<%= f.datetime_field :start_date %> </p> 35 <p> 終了日:<%= f.datetime_field :end_date %> </p> 36 <p> ステータス:<%= f.select :status, TaskState.all.collect { |a| [a.state, a.id] } %></p> 37 </div> 38 <div> 39 <%= link_to_remove_association "課題を削除", f, class: "btn-task-delete btn btn-secondary" %> 40 </div> 41 </div> 42</div>
疑問点
・(エラー内容と関連するか不明ですが、)ストロングパラメータの「merge」部分で関連するモデル(上記の場合はtask)の値を入力することは可能でしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/14 11:59
2021/06/14 16:09
2021/06/15 03:19
2021/06/15 04:48
2021/06/15 05:39