attributes on join model

given a setup like

class Parent   has_many :child_parents   has_many :children, :through => child_parents end

and assuming i'd like to store the style of relationship on the child_parents table, for example

create table child_parents(   parent_id   child_id   is_adopted )

in otherwords, 'is_adopted' is an attribute of the link between child and parent, not of the child or parent themselves, how can one access this simply?

child = parent.children.first p child.adopted?

is obviously desirable and used to be possible with HABTM associations. but that's deprecated.... however there seems to be no easy way to accomplish something similar with full blown join models.

cheers.

http://wiki.rubyonrails.org/rails/pages/has_and_belongs_to_many

"... has_and_belongs_to_many is great for what it does, but it is only adequate for simple many-to-many relationships. If your intermediary table needs to track additional data, then you may instead want to use ThroughAssociations instead. ..."

Cheers

yeah i'm aware of all that - the issue is that using HM:T give no simple method of getting back at the *particular* model/row used for the join. of course there can by more that one, but it's also the case that for any given pair of related objects there is exactly one row in the join model making that relationship and AR provides no handle on this record, which makes decorating it rather tricky.

ara.t.howard wrote:

given a setup like

class Parent   has_many :child_parents   has_many :children, :through => child_parents end

and assuming i'd like to store the style of relationship on the child_parents table, for example

create table child_parents(   parent_id   child_id   is_adopted )

in otherwords, 'is_adopted' is an attribute of the link between child and parent, not of the child or parent themselves, how can one access this simply?

child = parent.children.first p child.adopted?

cp = parent.child_parents.first child = cp.child p cp.adopted?