An advice on how to use associations

I have these models:

Company;
Categories;
Classifications.

A Company has many categories and a Category has many companies.
A Company for each of its own categories has a Classification.
For example:
Company-1 has Category-1 and Category-2.
Company-1 - Category-1 has Classification-III while Company-1 -
Category-2 has Classification IV.
How can I declare associations?

On Wed, Dec 14, 2011 at 11:12 PM, Mauro [email protected] wrote:

Company-1 - Category-1 has Classification-III while Company-1 -
Category-2 has Classification IV.
How can I declare associations?

Relevant documentation is here:

Active Record Associations — Ruby on Rails Guides

(For similar results, google for “Rails Guides ”).

If I understand correctly, your case would be a perfect case for
has_many :through (and not habtm) because you need
Classification attributes on each association between a
Company and a Category (then the Classification table is
the association table between Company and Category).

Try to work out the code for your case from that documentation.
If you have difficulties with it, please come back with your specific
problems, showing us the code your wrote.

HTH,

Peter

http://twitter.com/peter_v
http://rails.vandenabeele.com

On Thu, Dec 15, 2011 at 12:20 AM, Mauro [email protected] wrote:

A Company has many categories and a Category has many companies.
Active Record Associations — Ruby on Rails Guides
The join model is Classification with attributes like:
company_id
category_id
classification_id

What do you think about?

Indeed. I had not understood there are only a limited number of
Classification types possible between the Company and the
Category.

In that case, indeed it is better that the association table does
not have the Classification attributes itself, but you normalized
out these attributes to a third Classification table (with the
Classification#classification_type Classification.amount attributes).

WARNING: do not use ‘type’ as a column name, it is a special
column that is used for STI (Single Table Inheritance). Unless
you would really want to use STI on your Classifications (which
might make sense in an OO design if certain Classification types
have special functionality that is different from other Classification
types).

HTH,

Peter

http://rails.vandenabeele.com
http://twitter.com/peter_v

On 14 December 2011 23:47, Peter V. [email protected]
wrote:

For example:
(For similar results, google for “Rails Guides ”).

If I understand correctly, your case would be a perfect case for
has_many :through (and not habtm) because you need
Classification attributes on each association between a
Company and a Category (then the Classification table is
the association table between Company and Category).

I’m also was thinking about has_many :through.
The join model is Classification with attributes like:
company_id
category_id
classification_type
classification_amount.

But if classification.amount for classification.type II change I must
change all the occurrences for company and categories where
classification.type II occurs.

I think its better to use a join table like this:
company_id
category_id
classification_id

What do you think about?