前提・実現したいこと
rubyで、3つの異なるテーブルのデータを一度に保存したい。
モデルFolderのcreateアクション実行時に以下の3つの情報を格納したい
- Folderテーブルに格納すべき情報、
- 1:多数の関係にある親子関係のモデルCardの情報、
- 1:多数の関係にあるモデルFolderUsersの情報
発生している問題・エラーメッセージ
エラーは表示されていないが、controllerで@folderが保存できない。
パラメータを確認したところidが全てnilになっている。何故idが生成されないかの理由が判然とせず、またcardsに関しては何一つデータを取得することもできていない
terminal
1[1] pry(#<FoldersController>)> @folder 2=> #<Folder:0x00007f9d009ce7e0 id: nil, name: "aaaa"> 3[2] pry(#<FoldersController>)> @folder.cards 4=> [#<Card:0x00007f9d00a2c2a0 id: nil, omote: nil, ura: nil, folder_id: nil>] 5[3] pry(#<FoldersController>)> @folder.folder_users 6=> [#<FolderUser:0x00007faa9d074f78 id: nil, folder_id: nil, user_id: 4>]
該当のソースコード
contoroller
1class FoldersController < ApplicationController 2 3 def index 4 @folders = Folder.all 5 end 6 7 def new 8 @folder = Folder.new 9 @folder.cards.build 10 end 11 12 def create 13 @folder = Folder.create(folder_params) 14 @folder.folder_users.new(user: current_user) 15 if @folder.save 16 redirect_to :root, notice: '新しいフォルダを作成しました' 17 else 18 render :new 19 end 20 end 21 ~~~~~~~~~~~~~~~~~~~~~~~略~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 private 23 def folder_params 24 params.require(:folder).permit( 25 :name, 26 cards_attributes: { 27 omote: [], 28 ura: [], 29 folder_id: [] 30 } 31 ) 32 end 33end 34
試したこと
補足情報(FW/ツールのバージョンなど)
table
1>> FolderUser 2=> FolderUser(id: integer, folder_id: integer, user_id: integer) 3>> Folder 4=> Folder(id: integer, name: string) 5>> Card 6=> Card(id: integer, omote: string, ura: string, folder_id: integer)
routes
1 ~~~略~~~ 2 resources :folders, only: [:index, :new, :create, :edit, :update] do 3 resources :cards, only: [:index, :new, :create, :edit] 4 end 5 ~~~略~~~
アドバイスに従い以下のファイルを追記いたします
ViewFile
1= form_with model: folder, local: true do |f| 2 = f.label :name, "フォルダ名" 3 = f.text_field :name 4 = f.fields_for :cards do |c| 5 = c.label :omote, "カード(問題)" 6 = c.text_area :omote 7 = c.label :ura, "カード(解答)" 8 = c.text_area :ura 9 = f.submit
FolderModel
1class Folder < ApplicationRecord 2 has_many :folder_users 3 has_many :users, through: :folder_users 4 has_many :cards, dependent: :destroy 5 accepts_nested_attributes_for :cards 6 validates :name, presence: true 7end
CardModel
1class Card < ApplicationRecord 2 belongs_to :folder, optional: true 3 validates :omote, presence: true 4 validates :ura, presence: true 5end
参考にした記事など
https://qiita.com/hmuronaka/items/580b977834d4b3010454
https://qiita.com/tseno/items/70d39f7c0e8e1c779b5e
回答1件
あなたの回答
tips
プレビュー