2011-05-20 34 views
6

Tôi muốn hiển thị một loại cây được quản lý với tổ tiên đá quý.Tại sao phương thức đệ quy của tôi từ trình trợ giúp không trả về mọi giá trị?

Tôi muốn sử dụng trình trợ giúp sẽ đệ quy qua cây và trả về từng danh mục một, cho thời điểm không có thẻ html hoặc nội dung.

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 

Đối số category là một trong các danh mục gốc.

Điều gì sẽ trở lại?

  • Trong trang web: Nó chỉ hiển thị các loại cấp cơ Sport Beauty Automobile
  • Trong giao diện điều khiển: Men Indoor Women Children Water sport Garage

Nếu nhận được chúng, sau đó nó có nghĩa là các công trình đệ quy, nhưng nó không . Tại sao nó chỉ trả về lần lặp đầu tiên?

Ngoài ra tôi muốn có được chúng theo thứ tự sau đây:

root/child/child-of-child 

nhưng nếu tôi muốn quay trở lại category.name, nó phải là ở vị trí cuối cùng.

Bạn có thể vui lòng cho tôi nhận xét của bạn không?

PS: Tôi vừa phát hiện ra (trong thêm thẻ) mà tôi đã sử dụng từ "đệ quy" tất cả cùng tìm kiếm của tôi nhưng nó không tồn tại, ngay cả khi nhiều người đang sử dụng nó trên stackOveflow; o) - > "đệ quy", nhưng tôi vẫn đang mắc kẹt

** EDIT **

Bây giờ tôi sử dụng mã này:

  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 

mà mang lại cho tôi:

012.
 <div class ="nested_category">Sport 
      <div class ="nested_category">Men</div> 
      <div class ="nested_category">Women 
       <div class ="nested_category">Indoor</div> 
      </div> 
      <div class ="nested_category">Children</div> 
      <div class ="nested_category">Water sport</div> 
     </div> 
     <div class ="nested_category">Beauty</div> 
     <div class ="nested_category">Automobile 
      <div class ="nested_category">Garage</div> 
     </div> 

Nhưng html đó không được hiểu và mã giống nhau được hiển thị trong trang web được hiển thị. Tôi có nghĩa là tôi thấy

tôi có lẽ bị mất cái gì ... có lẽ kiến ​​thức oO

Thx

+0

Vui lòng thêm mã xem bạn đang sử dụng để hiển thị mẫu này trên mẫu. Bạn có thể thiếu phương thức raw() kèm theo phương thức display_tree() để ngăn Rails> = 3 tự động định dạng html. – robertodecurnex

Trả lời

3

Các mothod bạn đang sử dụng sẽ trở lại chỉ là một giá trị (gọi nắm tay để category.name thực tế) Về giao diện điều khiển, bạn đang nhận được các đặt mà bạn có bên trong vòng lặp (đó không phải là giá trị trả về của phương thức).

Hãy thử điều này và cho tôi biết nếu bạn vẫn có cái gì đó không đủ rõ ràng:

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

Có thể bạn sẽ cần định dạng cụ thể hơn. Nếu bạn có thể cung cấp thông tin chi tiết hơn về giá trị trả về dự kiến, chúng tôi có thể cải thiện ví dụ. – robertodecurnex

+0

Điều này đúng; các đặt của các lời gọi lồng nhau không được nối trực tiếp vào bộ đệm đầu ra của thư mục gốc. Đây là một cách khá thông minh để xử lý nó tôi nghĩ. – Jeremy

+0

Cảm ơn :) đó là sự hiểu lầm của tôi !! – 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 

Tôi trả lời cho qua chỉnh sửa câu hỏi của tôi.Tôi phải thêm dòng này:

để diễn giải chuỗi.

Thx

Các vấn đề liên quan