前提・実現したいこと
メンバー登録後edit画面でカテゴリーを引っ張ってきたい
発生している問題・エラーメッセージ
メンバー登録時に業種カテゴリーを選択したがeditに表示されない
エラーメッセージは起きていない
該当のソースコード
haml
1.member__block__forms__block__form__line{id:"member-industry-box"} 2 = member_work_histories.label :industry_category_id, '業種' 3 .member__block__forms__block__form__line__industry-parent 4 = member_work_histories.collection_select :industry_category_id ,IndustryCategory.ancestries(nil), :id, :name, {include_blank: "選択してください"}, {class: 'industry__category__parent--form'} 5 .member__block__forms__block__form__line__industry-child
models
1class MemberWorkHistory < ApplicationRecord 2 belongs_to :member 3 belongs_to :occupation_category, optional: true 4 belongs_to :industry_category, optional: true 5end
controller
1class MembersController < ApplicationController 2 def index 3 @members = Member.all 4 end 5 6 def new 7 @member = Member.new 8 @member.build_member_contact 9 @member.build_member_recruit_category 10 @member.build_member_recruit_status 11 @member.build_member_desired_condition 12 @member.build_member_application_route 13 @member.build_member_job_opening_type 14 @member.build_member_file 15 @member.build_member_academic_background 16 @member.member_qualifications.build 17 @member.member_work_histories.build 18 end 19 20 # 選択された親カテゴリーに紐付く子カテゴリーの配列を取得 21 def industry_category_children 22 @industry_category_children = IndustryCategory.find_by(id: "#{params[:parent_id]}", ancestry: nil).children 23 end 24 def occupation_category_children 25 @occupation_category_children = OccupationCategory.find_by(id: "#{params[:parent_id]}", ancestry: nil).children 26 end 27 28 def create 29 @member = Member.create(member_params) 30 if @member.save 31 redirect_to @member 32 else 33 render 'new' 34 end 35 end 36 37 def show 38 @member = Member.find(params[:id]) 39 end 40 41 def edit 42 @member = Member.find(params[:id]) 43 end 44 45 def update 46 member = Member.find(params[:id]) 47 member.update!(member_params) 48 redirect_to members_url, notice: "メンバー情報を更新しました" 49 end
javascripts
1industry_category.js 2$(function(){ 3 // カテゴリーセレクトボックスのオプションを作成 4 function appendOption(category){ 5 var html = `<option value="${category.id}" data-category="${category.id}">${category.name}</option>`; 6 return html; 7 } 8 // 子カテゴリーの表示作成 9 function appendChidrenBox(insertHTML){ 10 const childSelectHtml = ` <select class="industry__category__child--form" name="member[member_work_histories_attributes][0][industry_category_id]" id="industry_child-1"> 11 <option value="">選択してください</option> 12 ${insertHTML} 13 <select>`; 14 $('#box-industry-child-1').append(childSelectHtml); 15 } 16 $("#industry_parent-1").on('change', function(){ 17 var parentId = document.getElementById("industry_parent-1").value; //選択された親カテゴリーの名前を取得 18 if (parentId != ""){ //親カテゴリーが初期値でないことを確認 19 $.ajax({ 20 url: 'industry_category_children', 21 type: 'GET', 22 data: { parent_id: parentId }, 23 dataType: 'json' 24 }) 25 .done(function(children){ 26 $("#industry_child-1").remove(); //親が変更された時、子以下を削除する 27 var insertHTML = ''; 28 children.forEach(function(child){ 29 insertHTML += appendOption(child); 30 }); 31 appendChidrenBox(insertHTML); 32 }) 33 .fail(function(){ 34 alert('カテゴリー取得に失敗しました'); 35 }) 36 }else{ 37 $("#industry_child-1").remove(); //親カテゴリーが初期値になった時、子以下を削除する 38 }; 39 }); 40});
seed
1#----------業種---------- 2## メーカー 3maker = IndustryCategory.create(name: "メーカー") 4maker_one = maker.children.create([{name: "食品・農林・水産"}, 5 {name: "建設・住宅・インテリア"}, 6 {name: "繊維・化学・薬品・化粧品"}, 7 {name: "鉄鋼・金属・鉱業"}, 8 {name: "機械・プラント"}, 9 {name: "電子・電気機器"}, 10 {name: "自動車・輸送用機器"}, 11 {name: "精密・医療機器"}, 12 {name: "印刷・事務機器関連"}, 13 {name: "スポーツ・玩具"}, 14 {name: "その他メーカー"}]) 15## サービス・インフラ 16service_infra = IndustryCategory.create(name: "サービス・インフラ") 17service_infra_one = service_infra.children.create([{name: "不動産"}, 18 {name: "鉄道・航空・運輸・物流"}, 19 {name: "電力・ガス・エネルギー"}, 20 {name: "フードサービス"}, 21 {name: "ホテル・旅行"}, 22 {name: "医療・福祉"}, 23 {name: "アミューズメント・レジャー"}, 24 {name: "コンサルティング・調査"}, 25 {name: "人材サービス"}, 26 {name: "教育"}]) 27## 商社 28trading_company = IndustryCategory.create(name: "商社") 29trading_company_one = trading_company.children.create([{name: "総合商社"}, 30 {name: "専門商社"}]) 31## ソフトウェア 32software = IndustryCategory.create(name: "ソフトウエア") 33software_one = software.children.create([{name: "ソフトウエア"}, 34 {name: "インターネット"}, 35 {name: "通信"},]) 36## 小売 37retail = IndustryCategory.create(name: "小売") 38retail_one = retail.children.create([{name: "百貨店・スーパー"}, 39 {name: "コンビニ"}, 40 {name: "専門店"},]) 41・ 42・ 43・ 44割愛 45・ 46・ 47・
試したこと
newアクションと同じフォーム記述を使用した
補足情報(FW/ツールのバージョンなど)
ancestryで登録した
※業種カテゴリーは親子のみで作成しています
※バージョン
rails 5.2.4
ruby 2.5.1