実現したいこと
nested_formを利用して複数の項目を1つのフォームで動的に管理したいです。
例えば、会員(member)という項目の中に、
基本情報・職歴(jobs)・実績(achivements)などを一元管理したい場合にて、
職歴や実績などは1対Nの関係になるので、必要に応じて追加できる仕様にしたいです。
発生している問題
1つのフォームの中で = f.link_to_add "add", :(子テーブルシンボル)
を複数回、
今回の場合でいえば、職歴(jobs)と実績(achivements)を使用するため、
以下のエラーが発生して実装できません。
NoMethodError in Member#edit
undefined method `stringify_keys' for "javascript:void(0)":String
おそらく同レベルに2つ以上の = f.link_to_add "add", :(子テーブルシンボル)
が存在することが原因だと思いますが、解消する方法が見つかりません。
実装しているコード
以下のコードで実装しています。
この場合viewの = f.link_to_add "add", :achivements
のところでエラーが発生します。
ruby
1## Model 2 has_many :jobs, dependent: :destroy, inverse_of: :member 3 accepts_nested_attributes_for :jobs, reject_if: :all_blank, allow_destroy: true 4 5 has_many :achivements, dependent: :destroy, inverse_of: :member 6 accepts_nested_attributes_for :achivements, reject_if: :all_blank, allow_destroy: true 7 8## View 9= nested_form_for @member do |f| 10 = f.fields_for :jobs do |j| 11 .form-group 12 = j.label :car_title 13 br 14 = j.text_field :car_title 15 br 16 〜 中略 〜 17 = j.link_to_remove "remove" 18 = f.link_to_add "add", :jobs 19 = f.fields_for :achivements do |ach| 20 .form-group 21 = ach.label :portfolio_name 22 br 23 = ach.text_field :portfolio_name 24 br 25 〜 中略 〜 26 = ach.link_to_remove "remove" 27 = f.link_to_add "add", :achivements 28 br 29 .actions 30 = f.submit 'update'
回避策
エラーが発生する = f.link_to_add "add", :achivements
の行を1つネストを深くすることでエラー回避はできるのですが、そうなると全ての項目をremoveしてしまうとaddできなくなるので、実用的ではありません。
gem "nested_form"
gem 'jquery-rails'
は使用していて、それぞれ機能しています。よろしくお願いします。
あなたの回答
tips
プレビュー