質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

6934閲覧

配列に対してfields_forを使いたいが、パラメータに一つ分の入力しか送られない

midoriya

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

2クリップ

投稿2020/05/21 08:17

実現したいこと

Questionモデルの配列それぞれに対し、Answerモデルの:contentという入力を送信するフォームを作りたいのですが、うまくいきません

環境

ruby '2.5.3'
rails '5.2.2'

該当のソースコード

view

1reviews > new.html.erb 2 3<% @questions.each do |q| %> 4<%= "#{q.q_sentence}" %> 5<%= f.fields_for :answer do |af| %> 6<%= af.text_field :content, class: 'form-control' %> 7<%= af.hidden_field :question_id, :value => q.id %> 8```q_sentenceは質問文です 9質問文それぞれの下にテキストフィールドを表示させようとしています。 10  11   12  13```controller 14class ReviewsController < ApplicationController 15def new 16 @concert = Concert.find_obfuscated(params[:concert_id]) 17 @review = Review.new(flash[:review]) 18 @questionary = Questionary.find_obfuscated(params[:questionary_id]) 19 @questions = Question.where(questionary_id: @questionary.id) 20end 21 22def review_params 23 params.require(:review).permit(:area_of_residence, :comment, :occupation, :concert_id, :questionary_id, answer_attributes:[:id, :question_id, :review_id, :content] ) 24end

model

1 2class Questionary < ApplicationRecord 3 belongs_to :concert 4 has_many :reviews, dependent: :destroy 5 has_many :questions, dependent: :destroy 6 accepts_nested_attributes_for :questions 7 obfuscatable 8end 9 10class Review < ApplicationRecord 11 belongs_to :questionary 12 has_many :answers 13 accepts_nested_attributes_for :answers 14 obfuscatable 15end 16 17class Question < ApplicationRecord 18 belongs_to:questionary 19 has_many :answers, dependent: :destroy 20 accepts_nested_attributes_for :answers 21 obfuscatable 22end 23 24class Answer < ApplicationRecord 25 belongs_to :question 26 belongs_to :review 27end

わかりづらくて申し訳ないのですが、モデルの同士の関係はこのようにするつもりで書いています
イメージ説明

Qestionのq_sentenceカラムに質問文の情報があり
Questionaryは年齢、職業などを質問するかどうか?のフラグ用のパラメータを保管しています
Reviewnのnew画面から、Answerのcontent(質問の回答)とQuestionのidを同時に送りたいです。

発生している問題・エラーメッセージ

######入力

入力

######出力

Parameters: { ~省略~ "answer"=>{"content"=>"回答1:テスト質問2", "question_id"=>"2"}, "commit"=>"保存", ~省略~}

二つ目の入力しかparametersに渡っていませんでした。

下のサイトを参考に、fields_forの第二引数に@questionsの配列を渡す方法も考えたのですが、上手くいきませんでした。
https://kyudy.hatenablog.com/entry/20121114/1352906270

質問に不慣れなので不足している情報があるかもしれません。
追記するので教えていただければ幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

viewを以下のように修正したところうまくいきました!

view

1 2 3reviews > new.html.erb 4 5<% @questions.each do |q| %> 6<%= "#{q.q_sentence}" %> 7<%# field_forの引数を修正 %> 8<%= f.fields_for :answers, @review.answers.build do |af| %> 9<%= af.text_field :content, class: 'form-control' %> 10<%= af.hidden_field :question_id, :value => q.id %> 11

出力

Parameters: { ~省略~  "answers_attributes"=>{"0"=>{"content"=>"回答1"}, "1"=>{"content"=>"回答2"}} "commit"=>"保存", ~省略~}

fields_forの第一引数を複数形に、第二引数に子モデルのインスタンスを渡す必要がありました。

以下のサイトを参考にさせていただきました
https://qiita.com/nozonozo/items/e22ea1dab47a7189c93f

投稿2020/05/25 05:05

midoriya

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問