association to an association

i have a need to attach attribute(s) to a one to many association. in
essence it would be an association to an association. similar to a
polymorphic association but not. i wanted this to be in another table so
it could handle multiple types of association attributes. was thinking
i would need "join table name" as well as a concatented key "123_456"
that represents the 2 real indices. what is a good way to generate the
key from either of the related elements.

It would be easier if you actually describe the problem you are trying
to solve.
Lets use Person has_many Things as an example.
It sounds to me like you need to either put these new attributes in
the things table, or create a new assocication from the new table to
things.

hi, just included a couple of js files into my application layout and
pastedd the jas files into my appropriate js-folder:

<script type="text/javascript"
src="javascripts/growl/mootools-1.2b2.js"></script>
<script type="text/javascript"
src="javascripts/growl/growl-compressed.js"></script>

using webrick (all basic setup) gives me that:

ActionController::RoutingError (No route matches
"/javascripts/growl/growl-compressed.js" with {:method=>:get}):

file permissions are ok. i wonder, coz this doesnt happen to all the
other js files...
any ideas?
thx

hi, just included a couple of js files into my application layout and
pastedd the jas files into my appropriate js-folder:

<script type="text/javascript"
src="javascripts/growl/mootools-1.2b2.js"></script>

I think that should be src="/javasc....." The leading / tells it to
look in public, I presume they are in public/javascripts. It is
better to use javascript_include_tag however. Then you can just say
<%= javascript_include_tag "growl/mootools-1.2b2" %>

Colin

Sharagoz wrote:

It would be easier if you actually describe the problem you are trying
to solve.
Lets use Person has_many Things as an example.
It sounds to me like you need to either put these new attributes in
the things table, or create a new assocication from the new table to
things.

i pretty much already described it. if you had a HABTM association
between people and books .. i wanted to have attributes attached to each
association. for example: for person 5 and book 4 you would have related
records 1 and 2.

It was not entirely clear, nor is it now, though I think I get an idea
what you mean. In the first post you said it was one to many, now it
is many to many. Assuming many to many

Person
has_many book_associations
has_many books through book_associations

Book
has_many book_associations
has_many people through book_associations

BookAssociation
belongs_to person
belongs_to book
has_many somethings (I don't know what you want to call this)

Something
belongs_to BookAssociation

Does that help?

Colin

does your solution require a book_association model? i wanted the new
association of associations to be generic and not need a model or a
controller. by generic i mean it should handle other asociations like
dogs_persons autos_persons as well. all i really want to do is be able
to associate records in a table with other association records not
restricted to any model or type. i envision the table as having a field
that knows the name of the association (persons_books) and then a
concatentated key of the 2 associated records (46_100 where 46 is index
of person and 100 is index of book). also there can be more than one of
these records associated with the unique record persons_books:46_100.

HABTM is just a convenient way of creating a many-to-many association
when no additional information needs to be stored on the association.
In this case you do, so set up a proper many-to-many association and
put the additional fields on the model in the middle.

Sharagoz wrote:

In this case you do, so set up a proper many-to-many association and
put the additional fields on the model in the middle.

i get your model in the middle idea. but how will this serve different
many to many associations? seems it would need specific info on the
association it is associated to. i wanted to to be generic.

Gone Sail wrote:

i wanted to to be generic.

Then you may want to look at has_many_polymorphs... (I've always found
the minimalist HABTM to be insufficient - people always want to know who
related something, and when, so my join tables are always full models of
their own)

If A is related to B, and A is related to C, and X is the thing you want
to relate to an A-B relationship, or an A-C relationship, then perhaps
something like this:

A
  has_many ABjoins
  has_many Bs through ABjoins
  has_many ACjoins
  has_many Cs through ACjoins

B
  has_many ABjoins
  has_many As through ABjoins

AB
  belongs_to A
  belongs_to B
  has_many Xlinks as xlinkable
  has_many Xs, through Xlinks

C
  has_many ACjoins
  has_many As through ACjoins

AC
  belongs_to A
  belongs_to C
  has_many Xlinks as xlinkable
  has_many Xs, through Xlinks

X
  has_many Xlinks
  has_many ABjoins through Xlinks, source ABjoin, Xlinks.xlinkable_type
= ABjoin
  has_many ACjoins through Xlinks, source ACjoin, Xlinkx.xlinkable_type
= ACjoin

Xlink
  belongs_to X
  belongs_to xlinkable, polymorhpic => true
  belongs_to ABjoin, class_name ABjoin, foreign_key xlinkable_id
  belongs_to ACjoin, class_name ACjoin, foreign_key xlinkable_id

Ar Chron wrote:

Then you may want to look at has_many_polymorphs... (I've always found
the minimalist HABTM to be insufficient - people always want to know who
related something, and when, so my join tables are always full models of
their own)

right this sounds like what i need to do. so your association tables (AB
and AC) have their own unique ids? Xlink is the polymorphic link from AB
and AC to the X table elements? so the Xlink table will have an
xlinkable type and id along with the X table id? thanks.

Gone Sail wrote:

right this sounds like what i need to do. so your association tables (AB
and AC) have their own unique ids? Xlink is the polymorphic link from AB
and AC to the X table elements? so the Xlink table will have an
xlinkable type and id along with the X table id? thanks.

Yup.

AB or AC would have:
  id
  a_id
  b_id or c_id
  plus other fields

xlink would have:
  id (the xlink record id)
  x_id (the id of the related X record)
  xlinkable_id (this is the id of the AB/AC join record)
  xlinkable_type (this is the class name "AB"/"AC" of the join record)

i had not thought of a polymorphic association.
works good and does what i needed.

Ar Chron wrote: