2016-09-15 9 views
0

railsと一緒に始めてancestryの宝石ではじめて始まった。if else文を使ってルビーを反復する...(祖先の宝石に沿って)

Iは、他のカテゴリのオブジェクトにlink_toへの有線ボタンを表示するために、特定のカテゴリがに関連して、ancestry GEMを介してツリー構造に格納されているCategoryオブジェクトの配列を反復処理しようとしています。

データベースの最初の3つのカテゴリはルーツであるため、すべての子孫のボタンを表示するのに十分なスペースがビューにはありません。したがって、category.parent == 'nil'の場合は、指定されたカテゴリの子のみを表示したいと考えています。

他のすべてのカテゴリオブジェクトについては、特定のカテゴリのすべての子孫を表示したいと考えています。

<%= current_user.folders.each do |folder| %> 
    <% if folder.is_root? %> 
    <% folder.children.each do |child| %> 
     <%= link_to child, folder_path(child), class: 'btn' %> 
    <% end %> 
    <% else %> 
    <% folder.descendants.each do |desc| %> 
     <%= link_to desc, folder_path(desc), class: 'btn' %> 
    <% end %> 
<% end %> 

を反復処理するように私は、誰もが助言することができるだろう、これらの線に沿って何かを考えていましたか?

答えて

1

子供のカテゴリはどのように親と関係していますか?私は、parent_idの列を持つcategoriesテーブルを仮定します。

を考えると、これらのカテゴリ:今すぐ

parent_category = Category.create! 
child_category1 = Category.create! parent_id: parent_category.id 
child_category2 = Category.create! parent_id: parent_category.id 

parent_idが、それは親カテゴリであるかどうかを確認するためにnilであれば、あなたは、私たちはCategoryモデルに自己参照協会と範囲を追加します、確認することができます:

class Category < ActiveRecord::Base 
    scope :parents, -> { where(parent_id: nil).joins :children } 
    has_many :children, class_name: "Category", foreign_key: :parent_id 
end 

今、あなたは両親を反復し、各親の子を反復処理することができます

Category.parents.each do |parent| 
    parent.children.each do |child| 
    # code 
    end 
end 
+0

ツリー構造を確立するために祖先の宝石を使用しようとしています... – jmcgillion

+0

これは基本的に何をしていますか...しかし、私は与えられたカテゴリオブジェクトのIDに基づいて反復する方法を理解するのに苦労しています...あなたの応答diegoのためのtx、それは理解されています... – jmcgillion

+0

'ancestry'宝石は私が上で説明したように正確に動作します。あなたが "指定されたカテゴリのIDに基づいて反復"することが何を意味するかわからない。 'id'を使うと' category = Category.find id'というカテゴリを見つけることができます。そして、ancestry gemは 'children'メソッド' category.children'を与えます。オブジェクトのツリーをナビゲートする方法はたくさんあります。 – DiegoSalazar

関連する問題