Attributes on join model


#1

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.


#2

On 28 Pa¼, 20:53, “ara.t.howard” removed_email_address@domain.invalid wrote:

create table child_parents(
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


#3

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.


#4

ara.t.howard wrote:

create table child_parents(
p child.adopted?
cp = parent.child_parents.first
child = cp.child
p cp.adopted?


Rails Wheels - Find Plugins, List & Sell Plugins -
http://railswheels.com