2016-10-21 8 views
1

レールビューでカテゴリとサブカテゴリを出力するにはどうしたらいいですか?レールビューとコントローラのレコードを反復する

  • まず、カテゴリ名
    • まずカテゴリの子供1名
    • まずカテゴリの子供2名
    • まずカテゴリの子供3名
  • :このように第2のカテゴリ名
    • セカンドカテゴリの子供1名
    • セカンドカテゴリの子供2名
    • セカンドカテゴリの子供3名

schema.rb

create_table "categories", force: :cascade do |t| 
    t.integer "title" 
    t.boolean "state",   default: true 
    t.integer "parent_id"  # id of parent category 
end 

categories_controller.rb

def show 
    @category = Category.find(params[:id]) 
    #child categories of current parent category 
    @child_categories = Category.where(parent_id: @category.id) 
    #subchild categories of current parent category 
    @child_categories.each do |category| 
     @subchild_categories = Category.where(parent_id: category.id) 
    end 
end 

show.html。

  • まず、カテゴリ名
    • セカンドカテゴリの子供1名
    • セカンドカテゴリの子供2名
    • :ERBは

      <% if @child_categories.any? %> 
      <ul> 
      <% @child_categories.each do |child| %> 
          <li> 
           <%= child.title %> 
           <ul> 
            <% @subchild_categories.each do |subchild| %> 
             <li><%= subchild.title %></li> 
            <% end %> 
           </ul> 
          </li> 
      <% end %> 
      </ul> 
      <% end %> 
      

      は今、私はこのような何かを得ます第二カテゴリの子供3名

  • セカンドカテゴリ名
    • セカンドカテゴリの子供1名
    • セカンドカテゴリの子供2名
    • セカンドカテゴリの子供3名

答えて

1
#try this:  

def show 
    @category = Category.find(params[:id]) 

    @child_categories = Category.where(parent_id: @category.id) 

    @subchild_categories = {} 
    @child_categories.each do |category| 
    @subchild_categories[category.title] = Category.where(parent_id: category.id) 
    end 
end 



#and in view: 

<% @child_categories.each do |child| %> 
    <li> 
     <%= child.title %> 
     <ul> 
      <% @subchild_categories[child.title].each do |subchild| %> 
       <li><%= subchild.title %></li> 
     <% end %> 
    </ul> 
    </li> 
<% end %> 
+0

ありがとうございました!この仕事はうまく:) – Oleg

0

あなたはwhere(parent_id: id)を呼び出して、あなたのCategoryモデルでchildrenメソッドを作成することができ、その後、あなただけの

def self.children 
    where(parent_id: id) 
end 

それを使用し、あなたはあなたにそれを使用することができますがしたいなだけを表示します。

@category.children.each do |child_category| 
    child_category.children.each do |sub_child_category| 
    sub_child_category.children.each do |sub_sub_child_category| 
     // as much as you want to 
    end 
    end 
end 
関連する問題