2011-05-20 25 views
6

Mücevher atalarıyla yönetilen kategorilerden oluşan bir ağaç görüntülemek istiyorum.Özyinelemeli özüm yöntemim neden her değer döndürmüyor?

Yinelemeli olarak ağaçtan geçecek ve kategorileri birer birer döndürecek bir yardımcısı kullanmak istiyorum, html etiketleri veya içeriği olmayan bir an için.

module CategoriesHelper 
    def display_tree(category) 
    if category.has_children? 
     category.children.each do |sub_category| 
     display_tree(sub_category) 
     puts(sub_category.name) # to check if it goes here 
     end 
    end 
    category.name 
    end 
end 

category argüman kök kategorilerden biridir.

Neler döndü? Web sayfasında

  • : Bu konsolunda yalnızca kök düzey bir kategori Sport Beauty Automobile
  • görüntüler: onları alırsanız Men Indoor Women Children Water sport Garage

, o zaman o tekrarlama eserler anlamına gelir, ama öyle değil . Neden sadece ilk yinelemeyi döndürüyor?

root/child/child-of-child 

ama category.name iade etmek isterseniz, son pozisyonda olmalıdır:

Ayrıca ben şu sırayla onları almak istiyorum.

Lütfen yorumlarınızı iletir misiniz?

Not: Ben sadece kelime "recursivity" kullanıyordum (etiketleri ekleyerek sırasında) öğrendim birçok kişi stackOveflow üzerinde kullanıyor olsa bile, mevcut değil, ancak Aramalarımla boyunca tüm; o) - > "özyineleme", ama yine takıldım

** DÜZENLEME **

Şimdi bu kodu kullanın:

  module CategoriesHelper 

       def display_tree(category) 
       tree = "<div class =\"nested_category\">#{category.name}" 
       if category.has_children? 
        category.children.each do |sub_category| 
        tree += "#{display_tree(sub_category)}" 
        end 
       end 
       tree += "</div>" 
       end 
      end 

bana verir:

Ancak bu html yorumlanmaz ve görüntülenen sayfada aynı kod gösterilir. Belki bilgi oO

Thx

+0

Lütfen bunu şablon üzerinde oluşturmak için kullanmakta olduğunuz görünüm kodunu ekleyin. Muhtemelen Rails> = 3'ün html'yi otomatik olarak gizlemesini önlemek için display_tree() yöntemini içeren raw() yöntemini kaçırıyorsunuzdur. – robertodecurnex

cevap

3

sadece bir değer dönecektir kullandığınız mothod hakkında (yumruk çağrı aslında category.name kadar) ... Ben

Muhtemelen bir şey kaçırmışsın anlamına konsol, döngü içinde sahip olduğunuz koyarları (bu yöntemin dönüş değeri değil) alıyorsunuz.

bu deneyin ve hala yeterince açık değil bir şey varsa bana bildirin: Benim son düzenleme soru için cevap

module CategoriesHelper 

    def display_tree(category) 
    tree = category.name 
    if category.has_children? 
     category.children.each do |sub_category| 
     tree += "/#{display_tree(sub_category)}" 
     end 
    end 
    tree 
    end 

end 
+0

Muhtemelen daha özel bir biçime ihtiyacınız olacak. Beklenen dönüş değeri hakkında daha ayrıntılı bilgi verebiliyorsanız, örneği geliştirebiliriz. – robertodecurnex

+0

Bu doğru; Yuvalanmış girişimlerin kovanları doğrudan köpüğün çıktı tamponuna eklenmez. Bu, bunun üstesinden gelmek için oldukça zekice bir yol. – Jeremy

+0

Teşekkürler :) Bu benim yanlış anlama oldu! – Bachet

0
 module CategoriesHelper 

      def display_tree(category) 
      tree = "<div class =\"nested_category\">#{category.name}" 
      if category.has_children? 
       category.children.each do |sub_category| 
       tree += "#{display_tree(sub_category)}" 
       end 
      end 
      tree += "</div>" 
      tree.html_safe #That was missing to interprete the html returned... 
      end 
     end 

.Bu satırı eklemek istedim: dizeyi yorumlamak için

.

Thx

İlgili konular