前提・実現したいこと
メルカリのトップページにあるカテゴリー検索の機能を作ろうと思って、gemのancestryを扱いながら、取得してきたデータベースの情報をフロントで表示したいのですが、上手くできません。
おそらくeachがnilになっているので、controllerのなかで上手く変数が定義されていないのではないかと思うんですが、その定義の仕方がわからなくて困っています。
初めても質問で、拙い文で申し訳ないですが、どうかご教授いただけると幸いです。
発生している問題・エラーメッセージ
NoMethodError in HomeController#index undefined method `each' for nil:NilClass
該当のソースコード
Ruby
1class HomeController < ApplicationController 2 def index 3 @parents = Category.where(ancestry: nil) 4 5 end 6 def get_category_children 7 @parents.children = Category.(params[:parent_id]).children 8 end 9end
HTML
1 .header__contents--menu 2 .categorybox 3 %ul.right-items 4 %li.right-category 5 = link_to 'カテゴリー','/products', class: "catbtn" 6 .category-items 7 %ul.category-tree 8 - @parents.each do |parent| 9 %li.right-items__category 10 = link_to "#{parent.name}",'#', class: "parent_category",id: "#{@parents.ids}" 11 %ul.grand_children_list 12 - @parent.children.each do |child| 13 %li.grand_children_list-items 14 = link_to "#{child.name}", "#", class: "child_category",id: "#{@children.id}"
javascript
1$(function() { 2 function buildChildHTML(child){ 3 var html =`<a class="CildrenMenu__List" id="${child.id}" 4 href="/items/${child.id}/select_category_index">${child.name}</a>`; 5 return html; 6 } 7 $(".right-category").on("mouseover", function() { 8 var id = this.id 9 $(".right-items__category").show(); 10 $.ajax({ 11 type: 'GET', 12 url: '/products/new', 13 data: {parent_id: id}, 14 dataType: 'json' 15 }) 16 .done(function(children) { 17 children.forEach(function (child) { 18 var html = buildChildHTML(child); 19 $(".right-items__category").append(html); 20 }) 21 }); 22 }); 23 24 function buildGrandChildHTML(child){ 25 var html =`<a class="grand_child_category" id="${child.id}" 26 href="/category/${child.id}">${child.name}</a>`; 27 return html; 28 } 29 30 $(".parent-category").on("mouseover", function () { 31 var id = this.id 32 $(".grand_child_category").show(); 33 $.ajax({ 34 type: 'GET', 35 url: '/category/new', 36 data: {parent_id: id}, 37 dataType: 'json' 38 }) 39 .done(function(children) { 40 children.forEach(function (child) { 41 var html = buildGrandChildHTML(child); 42 $(".grand_children_list").append(html); 43 }) 44 $(document).on("mouseover", ".child_category", function () { 45 $(".grand_child_category").show(); 46 }); 47 }); 48 }); 49});
試したこと
引数の値を変えてみたり、where句やfind_byなどに変えてみたりしているのですが、できません。
また、引数にしている値を@category = Category.find_by(id: params[:id])のようにしてみた。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー