Steve Nelson
2006-Feb-01 15:21 UTC
[Rails] How do you display nested elements in their hierarchy?
Hello; I''d like some pointers on how to display nested items in their hierarchy. I''m developing a project that uses habtm (as opposed to "acts as tree"). I can interact with the elements using "parent", "child" etc. fine. I just can''t figure out how to make the elements *display* in their relationships. For example, if Ruby on Rails is a child of Server-Side and a sibling to PHP, and Server-side is a child of Coding and a sibling to Application, and Coding is a child of Main, how do I get the contents of the database to display in a browser something like: Main Coding Server-Side Ruby on Rails PHP Application If I sort the database by parent_id, I get stuff grouped by parent_id, not organized in the hierarchy. In some other scripting environment I would probably write some recursive routine but don''t know how to approach it with Rails. Any tips or pointers would be appreciated. Even what terms to use in google - I''m getting bird-related sites when I search for "nested"! Thanks -- Posted via http://www.ruby-forum.com/.
Ezra Zygmuntowicz
2006-Feb-01 17:51 UTC
[Rails] How do you display nested elements in their hierarchy?
Steve- Here is a helper method I use with acts_as_tree to display a set of nested <ul>''s. If you have the parent and children methods working then this should work for you as well. Make sure to set up a counter cache for your model that you use this on, otherwise you will end up calling tons of COUNT sql queries as you recurse through the children. module ApplicationHelper def find_all_children(parent) if parent.children.size > 0 ret = ''<ul>'' parent.children.each { |child| if child.children.size > 0 ret += ''<li>'' ret += link_to "#{child.role}: #{child.last_name}, # {child.first_name} : #{child.login}", :controller => ''review'', :action => ''boss_view'', :id => child ret += find_all_children(child) ret += ''</li>'' else ret += ''<li>'' ret += link_to "#{child.role}: #{child.last_name}, # {child.first_name} : #{child.login}", :controller => ''review'', :action => ''boss_view'', :id => child ret += ''</li>'' end } ret += ''</ul>'' end end end This will build and return a nested list just like you want. Make whatever changes to the model names and attributes you need. Cheers- -Ezra On Feb 1, 2006, at 7:21 AM, Steve Nelson wrote:> Hello; > > I''d like some pointers on how to display nested items in their > hierarchy. I''m developing a project that uses habtm (as opposed to > "acts > as tree"). I can interact with the elements using "parent", "child" > etc. > fine. I just can''t figure out how to make the elements *display* in > their relationships. > > For example, if Ruby on Rails is a child of Server-Side and a > sibling to > PHP, and Server-side is a child of Coding and a sibling to > Application, > and Coding is a child of Main, how do I get the contents of the > database > to display in a browser something like: > Main > Coding > Server-Side > Ruby on Rails > PHP > Application > > If I sort the database by parent_id, I get stuff grouped by parent_id, > not organized in the hierarchy. In some other scripting environment I > would probably write some recursive routine but don''t know how to > approach it with Rails. > > Any tips or pointers would be appreciated. Even what terms to use in > google - I''m getting bird-related sites when I search for "nested"! > > Thanks > > -- > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-Ezra Zygmuntowicz WebMaster Yakima Herald-Republic Newspaper ezra@yakima-herald.com 509-577-7732