Need help setting up associations for database table relationships

The domain I'm trying to model is that of a web app (already fully developed in J2EE) with multiple customers. The web app has a large set of features, but any given customer only has a subset of those. Each feature also has a set of configurable parameters that alter it's behaviour. Each customer will have a different set of parameter values for their features.

The intention is to build a RoR in-house web app to track the J2EE web app and bring some sanity to our documentation and testing processes, which are currently being performed in an adhoc, chaotic manner that leaves critical information spread out in mutiple directories on multiple machines. I see RoR as the lasso that can reign in this disorder and keep the company from sinking under the weight of these inefficiencies.

The database tables seem clear enough, but I'm having difficulty moving away from relational database thinking to the ORM associations paradigm. Please forgive me if some of what follows is almost completely ignorant of the Rails Way. I'm learning RoR on the fly, as it were - this is a stealth project, and I need to get something impressive up and working fast, before lots of money (and momentum) get spent going in the WRONG direction.

Here are the tables I see as necessary (along with their minimal attributes):

CUSTOMERS id name

FEATURES id name description

CUSTOMERS_FEATURES customers_id features_id

PARAMETERS id features_id value_range

CUSTOMERS_PARAMETERS customers_id parameters_id value

My initial hack at this in Rails associations would be: FEATURES has_and_belongs_to_many CUSTOMERS CUSTOMERS has_and_belongs_to_many FEATURES (this implicitly defines CUSTOMERS_FEATURES, correct?) FEATURES has_many PARAMETERS PARAMETERS belongs_to FEATURES CUSTOMERS has_and_belongs_to_many PARAMETERS PARAMETERS has_and_belongs_to_many CUSTOMERS (implicitly defines CUSTOMERS_PARAMETERS?)

I won't be able to try this out until this evening, but is this even in the ballpark of the correct approach?

Nice job. Sounds like you understand the mapping pretty well.

You have one tiny problem though: customers_parameters has an additional field which isn’t suited for has_and_belongs_to_many. There’s ways to do it with has_and_belongs_to_many, but they are not favorable and have been deprecated.

You actually want an association called has_many :through. In order to do that, you need to redesign your customers_paramters table… Rename it to a pluralized model. In this case, I’ll use ‘configurations’

configurations