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

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

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

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

Ruby on Rails

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

Q&A

1回答

1038閲覧

Rails5:field_forで複数テーブルに一度に保存したいけど、Unpermitted parameterとなってしまう

sakurasaku

総合スコア15

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/09/10 09:33

編集2022/01/12 10:55

fields_forで、一度に複数のテーブルに保存したいと考えています。フォーム内の各入力項目はブラウザ上で確認できる状態ですし、ページ遷移時にエラーも起こりません。ただ、子のテーブルにデータが保存されません。(fields_forの部分がUnpermitted parameterとなってしまうのが問題なのかなと思っています)

ネットで調べたところ、Rails5では、optional: trueやinverse_of: :profileをモデル内に記載した時に、問題解決したとの投稿を見かけましたが、私の場合、解決に至りませんでした。下記が関連するところのコードとなります。ご意見いただけますと幸いです。

profile.rb

ruby

1class Profile < ApplicationRecord 2 has_many :languages , inverse_of: :profile 3 accepts_nested_attributes_for :languages, allow_destroy: true 4end

language.rb

ruby

1class Language < ApplicationRecord 2 belongs_to :profile, optional: true, required:true 3end

_form.htmk.erb :profile本体のcontactまではデータ保存がかなっています。language部分が表示だけで、保存が叶いません。

ruby

1<div class="field"> 2 <%= f.label :contact %> 3 <%= f.text_field :contact %> 4 </div> 5 6 <%= f.fields_for :language do |i| %> 7 <div class="field"> 8 <%= i.label :language %> 9 <%= i.text_field :language %> 10 </div> 11 <div class="field"> 12 <%= i.label :rank %> 13 <%= i.text_field :rank %> 14 </div> 15 <% end %>

profiles_controller.rb

ruby

1 def new 2 @profile = Profile.new 3 @profile.languages.build 4 end 5 6 def edit 7 end 8 9 def create 10 @profile = Profile.new(profile_params) 11 @profile.id = @current_user.id 12 ...... 13 14 ...... 15 def profile_params 16 params.require(:profile).permit(..., :contact, languages_attributes: [:id,:language,:rank]) 17 end

※試しに上記の一部を”language_attributes”に変えてみましたがうまくいきませんでした。

ターミナルのログの一部

"contact"=>"f", "language"=>{"language"=>"g", "rank"=>"11"}}, "commit"=>"Submit"}
Unpermitted parameter: language

画像

イメージ説明

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

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

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

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

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

guest

回答1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問