modeling questions

4 views
Skip to first unread message

Me

unread,
Nov 19, 2010, 12:50:18 AM11/19/10
to Ruby on Rails: Talk
Howdy, I have a couple questions on the best way to model things in
rails.

1. How to model a table so an admin person can selectively turn on/
off hard/soft deletes from a table at a table level?
2. Model a parent/child relationship that can go infinitely deep.
specifically equipment, parent => child => child => child ....

Bala Paranj

unread,
Nov 19, 2010, 3:04:18 AM11/19/10
to rubyonra...@googlegroups.com
On Thu, Nov 18, 2010 at 9:50 PM, Me <chab...@gmail.com> wrote:
Howdy,  I have a couple questions on the best way to model things in
rails.

1.  How to model a table so an admin person can selectively turn on/

Use acts as paranoid plugin.
 
off hard/soft deletes from a table at a table level?
2.  Model a parent/child relationship that can go infinitely deep.
specifically equipment,  parent => child => child => child ....

Use acts as tree plugin 
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.




--
Cheers,
Bala
RoR Developer Now Available for Hire

Marnen Laibow-Koser

unread,
Nov 19, 2010, 7:23:45 AM11/19/10
to rubyonra...@googlegroups.com
Bala Paranj wrote in post #962528:
[...]

>> 2. Model a parent/child relationship that can go infinitely deep.
>> specifically equipment, parent => child => child => child ....
>>
>> Use acts as tree plugin

Hell no! acts_as_tree should be avoided at all costs. The adjacency
list model that it uses is simple, naïve, and inefficient: each level of
the tree requires a separate query (unless you're using Oracle, which
has a proprietary extension to its SQL that fixes this).

What you want instead is a *nested set* or *nested interval* structure
(do a Web search for articles on how these work). These allow retrieval
of an entire tree, to arbitrary depth, with a single query. Rails
plugins exist for both. acts_as_nested_interval was buggy last time I
used it, but has probably been fixed by now. awesome_nested_set lives
up to its name.


>
>>
> --
> Cheers,
> Bala
> RoR Developer Now Available for Hire

The fact that you're recommending acts_as_tree means that people ought
to think twice about hiring you...

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

Sent from my iPhone

--
Posted via http://www.ruby-forum.com/.

gezope

unread,
Nov 19, 2010, 9:41:34 AM11/19/10
to Ruby on Rails: Talk
Hello,

2. http://guides.rubyonrails.org/association_basics.html
Here check has_many :through , has_and_belongs_to_many assotiations,
and I think you may need polymorphic association. You have to try them
out, but there are some help in the tutorial to make decision.

I'm not sure if I understand well your first question, can you write
it more clearly please?

good luck,
gezope

Marnen Laibow-Koser

unread,
Nov 19, 2010, 11:38:41 AM11/19/10
to rubyonra...@googlegroups.com
Please quote when replying.

Zoltan Gero wrote in post #962586:


> Hello,
>
> 2. http://guides.rubyonrails.org/association_basics.html
> Here check has_many :through , has_and_belongs_to_many assotiations,
> and I think you may need polymorphic association. You have to try them
> out, but there are some help in the tutorial to make decision.

Nope. All you need is awesome_nested_set.

>
> I'm not sure if I understand well your first question, can you write
> it more clearly please?
>
> good luck,
> gezope

Best,

--
Posted via http://www.ruby-forum.com/.

Frederick Cheung

unread,
Nov 19, 2010, 11:15:01 PM11/19/10
to Ruby on Rails: Talk


On Nov 19, 12:23 pm, Marnen Laibow-Koser <li...@ruby-forum.com> wrote:

>
> Hell no!  acts_as_tree should be avoided at all costs.  The adjacency
> list model that it uses is simple, naïve, and inefficient: each level of
> the tree requires a separate query (unless you're using Oracle, which
> has a proprietary extension to its SQL that fixes this).
>
> What you want instead is a *nested set* or *nested interval* structure
> (do a Web search for articles on how these work).  These allow retrieval
> of an entire tree, to arbitrary depth, with a single query.  Rails
> plugins exist for both.  acts_as_nested_interval was buggy last time I
> used it, but has probably been fixed by now.  awesome_nested_set lives
> up to its name.
>

Although nested sets make inserts very expensive. Like most data
modelling questions, the sort of access patterns that will be used -
while acts as tree makes getting a whole subtree expensive, if you
never need to do that in your app, who cares?

Fred
>
>
> > --
> > Cheers,
> > Bala
> > RoR Developer Now Available for Hire
>
> The fact that you're recommending acts_as_tree means that people ought
> to think twice about hiring you...
>
> Best,
> -- 
> Marnen Laibow-Koserhttp://www.marnen.org

Marnen Laibow-Koser

unread,
Nov 20, 2010, 8:17:06 AM11/20/10
to rubyonra...@googlegroups.com
Frederick Cheung wrote in post #962721:

> On Nov 19, 12:23pm, Marnen Laibow-Koser <li...@ruby-forum.com> wrote:
>
>> used it, but has probably been fixed by now. awesome_nested_set lives
>> up to its name.
>>
>
> Although nested sets make inserts very expensive.

So use nested intervals instead. They fix that problem completely.

> Like most data
> modelling questions, the sort of access patterns that will be used -
> while acts as tree makes getting a whole subtree expensive, if you
> never need to do that in your app, who cares?

If you never need a whole subtree, you probably don't need a tree
structure in the first place (though there are exceptions).

>
> Fred

Best,
-- 
Marnen Laibow-Koser

Reply all
Reply to author
Forward
0 new messages