has_many :through or has_and_belongs_to_many?
I have several data models that don’t directly know about each other, but need to be connected somehow so results of the opposite type can be returned when searching against the first. But which method to use?
Lets see:
has_and_belongs_to_many
- make a reference table of only foreign keys – no other attributes(? used to but deprecated)
- no extra models – Just link to the opposite class from the both models.
- connected via a table
- can only join two models
has_many :through
- make a table with your two ids, and other attributes (editable?)
- make a (join?) model for that table, that lets it know it belongs to the two models you are linking
- tell each model that it is linked to it’s opposite model :through=> the joined model.
- connected via a model
- can spiderweb multiple models together
Either will work for most things. has_many :through seems to be more versatile (if a little more work required to get back what you want), especially if you want extra attributes. habtm is quick, and simple, but not quite as diverse in it’s functionality.
Now looking closer at what I need to do, I will probably be required to connect at least three things together – and who knows, maybe more! Which would make has_many :through the way to go.
Good articles for more information or examples:
http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off
http://stevengharms.com/rails-stevens-guide-to-many-to-many-associations-or-habtm-12
Buy:Aricept.Female Cialis.Prozac.Lipothin.Female Pink Viagra.Lipitor.Nymphomax.Ventolin.Acomplia.Seroquel.Zocor.Zetia.Buspar.Benicar.Wellbutrin SR.Advair.Amoxicillin.SleepWell.Cozaar.Lasix….