前提・実現したいこと
cocoonでネストし、複数造成できるフォームの親子カテゴリー(ancestryで実装)を編集したい
個別で設定したカテゴリーをレコードごとに取り出したい。
cocoonが複雑にしているのか...?
発生している問題・エラーメッセージ
undefined method `industry_category_id' for #<ActionView::Helpers::FormBuilder:0x00007f916ac79d60>
該当のソースコード
コントローラ
class MembersController < ApplicationController before_action :member_preset, only: [:edit] def edit end private def member_preset @member = Member.find(params[:id]) end end
親モデル
class Member < ApplicationRecord has_many :member_work_histories, inverse_of: :member end
子モデル
class MemberWorkHistory < ApplicationRecord belongs_to :member belongs_to :industry_category, optional: true end
フォーム
= form_with(model: @member, local: true ) do |member| .member__form .member__block__forms__block__title %h1.member__block__forms__block__title__text.title-confirm 職務経歴 = member.fields_for :member_work_histories, @member.member_work_histories do |member_work_history| = render 'member_work_history_fields', f: member_work_history .links = link_to_add_association '職歴を追加', member, :member_work_histories, class: 'more__qualifications'
renderしている内容
.nested-fields .member__block__forms__block__form.form-background-confirm %li.block__form__line__title 職歴 .member__block__forms__block__form__line{id:"member-industry-box"} = f.label :industry_category_id, '業種' - if controller.action_name == "edit" .member__block__forms__block__form__line__industry-parent = f.select :industry_category_id ,options_for_select(IndustryCategory.ancestries(nil).map{|c|[c[:name], c[:id]]}, IndustryCategory.find(f.industry_category_id).parent.name), {id: 'industry_parent'} .member__block__forms__block__form__line__industry-child = f.select :industry_category_id ,options_for_select(IndustryCategory.find(f.industry_category_id).siblings.map{|c|[c[:name], c[:id]]}, IndustryCategory.find(f.industry_category_id)), {id: 'industry_child'} - else .member__block__forms__block__form__line__industry-parent = f.collection_select :industry_category_id ,IndustryCategory.ancestries(nil), :id, :name, {include_blank: "選択してください"}, {class: 'industry__category__parent--form'} .member__block__forms__block__form__line__industry-child = link_to_remove_association '削除', f, class: 'btn btn-default', id: 'remove-work_history'
試したこと
コントローラでeachで回して変数を定義ものを利用したが、viewでもeachを回すために誤差が生じる。
def edit @member.member_work_histories.each do|member_work_history| @member_work_history = member_work_history end end
.member__block__forms__block__form__line__industry-parent = f.select :industry_category_id ,options_for_select(IndustryCategory.ancestries(nil).map{|c|[c[:name], c[:id]]}, IndustryCategory.find(@member_work_history.industry_category_id).parent.name), {id: 'industry_parent'} .member__block__forms__block__form__line__industry-child = f.select :industry_category_id ,options_for_select(IndustryCategory.find(@member_work_history.industry_category_id).siblings.map{|c|[c[:name], c[:id]]}, IndustryCategory.find(@member_work_history.industry_category_id)), {id: 'industry_child'}
上記だと個別に設定したものではなく、同じものがレコード数分出力された
補足情報(FW/ツールのバージョンなど)
rails 5.2.4
ruby 2.5.1
cocooon
ancestry
情報の抜け漏れありましたら、ご指摘願います。
何卒よろしくお願い致します。
あなたの回答
tips
プレビュー