I am trying to code a helper that will print a list of threaded forums,
as options of a select field…a forum has a parent_id (which is another
forum’s id) or 0, meaning it is a “root level” forum…
For example, the result will look like:
Forum 1
–Sub forum 1
–Sub forum 2
----Sub Sub Forum 1
–Sub forum 3
Forum 2
–Sub forum 2a
…
(picture this in a select menu)
There can be an unlimited amount of nested forums…my first thought was
to use a recursive function, however, since an helper will only “print”
what it returns (and should only return 1 thing) it’s a bit tricky… I
don’t really see an easier way to this, but anyway here’s what I have so
far:
def print_child_forums(master)
#get the forum’s childs…
childs = Forum.find(:all, :conditions => [“parent_id = ?”,
master.id], :order => ‘name ASC’)
if childs.size > 0 #forum has subforums
#Here, I need to print this forum before going deeper!
for child in childs
print_child_forums(child)
end
else
#forum has no child, print it...
"<option value=\"#{master.id}\">#{master.name}</option>"
end
end
The problem obviously is that when a forum has child, it is never
printed! since the only “return point” of the function occurs when the
forum has no child… from what I understand, I can’t output any html in
the helper function, except with it’s return value… and I can’t really
use string concatenation since the function is being called multiple
times (recursivity)…
my idea basically(using pseudo code) was quite simple:
print_childs(master):
if master has childs
print master
for each child:
print_childs(child) (recursivity)
end for
else (master has no child)
print master
end if master has childs
end print_childs
But this is turning out to be trickier than I thought… Note that I
might be going at it all wrong, it’s 5am+ and I’m trying to get this
done before going to bed…and somehow, I doubt I am thinking clearly
LOL…
Any suggestions would be appreciated!