前提・実現したいこと
【Rails でのフォーム実装】
■ 実現したいこと
1回のフォーム投稿で複数のテーブルにデータを保存したい。
■ 現状
・form_withメソッドを使用
・要約テーブル(titleカラム、contentカラム)と感想テーブル(contentカラム)に入力データを保存したい。
発生している問題・エラーメッセージ
・要約テーブル(Summary)と感想テーブル(Review)で一緒のカラム名があるため、form_withメソッド内でname属性が被ってしまう。
・name属性が被らないようにsummary_content、review_contentとすると、createアクションで受け取る時にキー名とカラム名が一致せず保存ができない。
該当のソースコード
haml
1-# 入力フォーム 2= form_with(model: [@book, @note], local: true) do |f| 3 .summary-form 4 = f.text_field :summary_title, placeholder: "見出しを入力してください", class: "summary-title-form" 5 = f.text_field :summary_content, placeholder: "要約を入力してください", class: "summary-content-form" 6 .review-form 7 = f.text_field :review_content, placeholder: "感想を入力してください", class: "review-form" 8 .submit-btn-form 9 = f.submit "保存"
Ruby
1# コントローラ 2def create 3 @summary = Summary.create(summary_params) 4 @review = Review.create(review_params) 5 redirect_to root_path 6end 7 8private 9 def review_params 10 params.require(:note).permit(:review_content) 11 end 12 13 def summary_params 14 params.require(:note).permit(:summary_content) 15 end 16end
Ruby
1# 各モデル 2 3class Book < ApplicationRecord 4 has_many :notes 5end 6 7class Note < ApplicationRecord 8 belongs_to :book 9 has_many :summaries 10 has_many :reviews 11end 12 13class Summary < ApplicationRecord 14 belongs_to :note 15end 16 17class Review < ApplicationRecord 18 belongs_to :note 19end 20
試したこと
・private内でキー名を変更してcreateアクションに渡せばよいかと思いましたが、簡単にキー名を変更できるメソドが探せずどうすればスマートか教えていただきたいです。
補足
ここで登場するのは4つのテーブルです。
1.booksテーブル
2.notesテーブル
3.summariesテーブル
4.reviewsテーブル
一つのbookに対して多くのnote、さらにそこからsummaryとreviewが枝分かれするイメージです。
回答1件
あなたの回答
tips
プレビュー