Re: acts_as_tree

Marnen Laibow-Koser
Fri, 07 Aug 2009 16:37:27 -0000

Doug Jolley wrote:
>> �Have you read about the nested-set data structure?
>
> Yes; but, not in detail.  The section on nested sets immediately
> follows the section on acts_as_tree in "Pro-Active Record".

I''ve never heard of Pro-Active Record, and it sounds very much like it
is steering you wrong.

>
> I take it that awesome_nested_set is not the same thing as
> acts_as_nested_set?

They are different plugins.  When I did my research a few months ago,
awesome_nested_set seemed the better choice.

>
> In any event, here''s the deal.  I just stumbled onto acts_as_tree
a
> few days ago.  Before that, I was oblivious to it.  Because I was off
> in oblivion, I hardcoded a solution for creating the hierarchical
> view.  (It took me about 2 weeks! :) )  It uses a linked-records
> approach where each record has a pointer to its ancestor much like
> acts_as_tree.

Yes, the classic adjacency list structure.

> Surprisingly, it seems to work just fine; however, the
> code is about 100 lines in length and its messy.  I''m sure that my
> code is even less efficient than act_as_tree; and, as I say, it seems
> to work just fine.  So, I don''t think that performance is going to
be
> an issue.  I''d like to clean up my messy code.

OK.

> I think that if I use
> acts_as_tree, I can use my existing database.  I just have to be sure
> to declare my foreign key since I named my pointer column
''parent''
> rather than the default, ''parent_id''.  If I use a
nested-set approach,
> I would have to modify/re-create the database.

You would need to make a very small change (add two numeric fields and
run one or two simple statements in the migration).  It''s quite easy.

> In addition, based on
> Ilan''s comments, I have a vague idea of how to proceed with
> acts_as_tree where I am much more in the dark with nested sets.

Then learn about nested sets.  The principle is not difficult, and the
data structure works much better.  Joe Celko''s articles are a good
place
to start.

> All
> in all and despite your undoubtedly good advice to the contrary, I
> would like to proceed with a acts_as_tree solution.

It''s your decision, but be aware that based on what you''ve
posted,
you''re basing your decision on the wrong criteria.

> That  doesn''t
> mean that I won''t re-do it with nested sets at some future date.
I
> just want to make sure that I can walk before I try flying.

It doesn''t work like that here.  It''s more like trying to walk
from New
York to Boston because learning to drive a car seems too hard.


> I hope
> that you guys will stick with me through my adventure which I''m
not
> even going to be able to begin for a couple of days because of other
> things which have arisen.
>
> Thanks ever so much for your awesome help.

You''re most welcome.  Again, please choose a data structure that
actually suits your needs, not one that looks simpler but won''t do the
job.

>
>             ... doug

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org