依存関係のあるモデルで、子テーブルのデータを一気に作成したいと思っています。過去に作ったコードや様々なデータを参考に実装を進めていますが、strongparamaterで指定したはずのparamsがうまく送れていません。
なお、子モデルは親モデルとほかのモデルの中間テーブルで、親モデルはさらに別のモデルの中にネストしています。
テーブルの構造
親テーブルactivities
とstaffs
の中間テーブルとして、activity_logs
があります。
activity_logs | |
---|---|
PK | id |
FK | staff_id |
FK | activity_id |
joind: boolean | |
planed: boolean |
書いたコード
model
Ruby
1class Activity < ApplicationRecord 2 has_many :activity_logs 3 has_many :staffs, through: :activity_logs 4 accepts_nested_attributes_for :activity_logs 5end
Ruby
1class Staff < ApplicationRecord 2 has_many :activity_logs 3 has_many :activities, through: :activity_logs 4end
Ruby
1class ActivityLog < ApplicationRecord 2 belongs_to :activity 3 belongs_to :staff 4end
routing
関係ないとは思いますが、今回はactivitiesがすでに別の親モデルの中にネストした形になっていました。
ruby
1# routes.rb 2 resources :facilities, only: [:new, :create, :index, :show] do 3 resources :activities, only: [:new, :create] 4 end
controller
Ruby
1# activities_controller.rb 2class ActivitiesController < ApplicationController 3 def new 4 @activity = @facility.activities.new 5 @activity.activity_logs.build 6 end 7 8 def create 9 @activity = @facility.activities.build(activity_params) 10 if @activity.save 11 # 成功したときの処理 12 else 13 # 不成功だった時の処理 14 end 15 end 16 17 private 18 19 def activity_params 20 params.require(:activity).permit( 21 :activity_name, 22 :date, 23 activity_logs_attributes: [{staff_id: @current_user.id}, 24 :carried_out, 25 :got_appointment]) 26 end 27end 28
困っていること
activity_params
にactivity_logs_attributes
を含めることができません。params
とactivity_params
の出力結果はそれぞれ下記のとおりです。
params
1{<前略> "activity"=><ActionController::Parameters { 2 "date"=>"2020-07-31", 3 "activity_name"=>"テスト", 4 "activity_logs"=>{ 5 "staff_id"=>"3", 6 "carried_out"=>"true", 7 "got_appointment"=>"true" 8 }, <攻略>} permitted: false
# activity_params {"activity_name"=>"テスト", "date"=>"2020-07-31"} permitted: true
試したこと
1)▼こちらの記事を読んで、間違っている点がないか確認しました
fields_forを使った子モデルへの複数レコード保存【cocoonが便利】
→間違いは発見できず
2)ネストしたRouting下にいないほかのページで使われているfields_forは正しく動作していたので、Routingでのネストを外してみました
→activity_params
の値は変わらず
何時間も同じところで止まってしまっていて、困っています。
ほかに参照すべき場所がありましたらアドバイスいただけますと嬉しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。