🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

555閲覧

メンバー登録後edit画面でカテゴリーを引っ張ってきたい

kazuaki25nigo

総合スコア0

Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/11/27 14:00

編集2020/12/01 10:52

前提・実現したいこと

メンバー登録後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: "専門店"},]) 41424344割愛 454647

試したこと

newアクションと同じフォーム記述を使用した

補足情報(FW/ツールのバージョンなど)

ancestryで登録した
※業種カテゴリーは親子のみで作成しています

※バージョン
rails 5.2.4
ruby 2.5.1

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

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

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

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

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

tomtomtomtom

2020/11/30 15:15

・業種カテゴリーは親子のみで作成とありますが、memberが属するのは必ず子カテゴリーでしょうか? ・親カテゴリには必ず子カテゴリがいるのでしょうか? ・書かれているモデルからmemberとindustry_categoryは多対多と推測しましたが間違いないでしょうか?また、多対多にする必要性はなんでしょうか? お手数をおかけして誠に申し訳有りませんが、よろしければご回答下さい。
kazuaki25nigo

2020/12/01 10:46

ご連絡有難う御座います。 seedもこの後追加しますが下記内容がご質問への回答です ・業種カテゴリーは親子のみで作成とありますが、memberが属するのは必ず子カテゴリーでしょうか? ┗memberは子カテゴリーです ・親カテゴリには必ず子カテゴリがいるのでしょうか? ┗親には必ず子カテゴリーがいます ・書かれているモデルからmemberとindustry_categoryは多対多と推測しましたが間違いないでしょうか? ┗こちらは多対多です ・また、多対多にする必要性はなんでしょうか? ┗職歴(menber_work_history)は転職していたりするといくつも持つ為メンバーの子モデルである職歴はhas_manyでアソシエーションを組んでます
tomtomtomtom

2020/12/01 15:34

連絡が遅れ誠に申し訳有りません。 そうしますと、恐らくですが collection_select の部分に誤りがあるかと思われます。 ちょっと調べてからまた連絡いたします。
tomtomtomtom

2020/12/01 22:16

すいません。 一晩調べましたが ちょっと私の手には余るようです。 - @member.member_work_histories.each do | member_work_history | = member_work_history. industry_category.root_id 上記とcollection_selectを併せて、登録したカテゴリの数だけ、selectタグが必要になるかと思いますが、 そのselectタグすべて、違うnameにする必要があるのかな?と思います。 私にはその方法や、それで上手くupdateできるのか?など検証できる環境も無いため分かりません。 申し訳有りません。
guest

回答1

0

model Memberのcode
new の view
member_params
が載っていないので推測ですが、多対多の関連をsaveするcodeになっていないのでは? と思われます。
また viewが一つしかハンドリングできないようになっているのも気になります。

まずは rails c にて、関連が登録されているかどうか見るのが必要です。

投稿2020/12/31 06:06

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問