modeling questions

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 ....

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?

  1. Model a parent/child relationship that can go infinitely deep.

specifically equipment, parent => child => child => child …

Use acts as tree plugin

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,

Hello,

2. Active Record Associations — Ruby on Rails Guides 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

Please quote when replying.

Zoltan Gero wrote in post #962586:

Hello,

2. Active Record Associations — Ruby on Rails Guides 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,

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

Frederick Cheung wrote in post #962721:

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,