how should I structure this model?

I have an application that is used by several different organizations. (each organization runs their own copy)

In the application, there are users, and each user can have a number of specialties. The specialties vary from organization to organization. Also, the possible specialties may change from time to time, according to the wishes of that particular organization.

Normally, I would think that I would create a specialties table with a has and belongs to many relationship with users. But I don’t want to be building different tables for each organization, and I want them to be able to add and delete specialties at will.

At the moment, I have a constant defined in my environment.rb that holds an array of the specialties (an array of strings). Then in each user, I have a serialized field that holds an array of the specialties appropriate to that user. But of course, the constant can’t be changed by the organization, and the whole thing is awkward for checkboxes, etc.

There has to be a better way, and I would me most grateful for any advice.


If a user belongs to an organization, go ahead and do what you
suggested (habtm). The organization would only see their users'
specialties because specialties would be related to users.

If a user can belong to multiple organizations, look into using
_with_scope on your find statements.


Sounds like you want to be able to drive this particular part of the
application from a model, not from the environment.rb. Make that puppy
data-driven for the specialties allowed within each organization.
There's no reason that data shouldn't reside in a table. Even a basic
scaffolded interface would let the right person (the organization's
admin user) create new specialties, etc, etc.

By "(each organization runs their own copy)", do you mean that each
organization has their own database? If not, the specialties just need
an organization tag assigned to them to keep them separate in the
processing, re: Kyle's _with_scope suggestion.