Storing additional data on join tables with Rails


#1

Hi there

I need to store additional attributes on join table. Searching the
Wiki [1] revealed two possible methods:

  1. push_with_attributes, as described by Justin Palmer [2].
    Unfortunately, “this method is now deprecated” [3]. Even if it wasn’t,
    there seem to be inherent problems with that approach, for example
    with updating those additional attributes, though Joshua M. have
    provided us with a plugin for that [4].

  2. promote the join-table to a full module. This approach seems to
    integrate better with Rails, and even a newb like me can sense that it
    has a lesser chance of rubbing ActiveRecord’s magic the wrong way,
    thereby breaking something. Still, that habtm association is just an
    association, not a model. I wouldn’t want to make it a model if I
    could help it.

So, what’s the best practice for storing additional data on join
tables with Rails?

-Alder


[1] http://wiki.rubyonrails.com/rails/pages/has_and_belongs_to_many
[2]
http://encytemedia.com/blog/articles/2005/06/15/storing-additional-data-on-join-tables-with-rails#comment-490
[3]
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html
[4]
http://wiki.rubyonrails.com/rails/pages/Update+has_and_belongs_to_many+Attributes


#2

Make the join table a full model and look in the docs for has_many
:through

Peter


#3

Alder G. wrote:

So, what’s the best practice for storing additional data on join
tables with Rails?

http://blog.hasmanythrough.com/articles/2006/04/20/many-to-many-dance-off


Josh S.
http://blog.hasmanythrough.com


#4

On 5/6/06, Josh S. removed_email_address@domain.invalid wrote:

Alder G. wrote:

So, what’s the best practice for storing additional data on join
tables with Rails?

http://blog.hasmanythrough.com/articles/2006/04/20/many-to-many-dance-off


Josh S.
http://blog.hasmanythrough.com

Thanks Josh!

“has_many :through” is awesome, and your article is very informative.

Certainly, through associations are the proper way to do what I want.

Regards,
Alder