I’m building a site for a school which has a number of activities and
groups. Each activity can have a multiple leaders and multiple
participants. The groups and activities vary widely - some are events,
some
are classrooms, some are study groups and some are short-term projects.
Instead of having multiple habtm tables, I thought it would be cleaner
to
have a single table called ‘participations’ that would look like:
- participateable_id
- participateable_type
- person_id
- role_id
The model structure might look like this -
- class Person;
- class Event; has_many :instructors; has_many :students;
- class StudyGroup; has_one :instructor; has_many :students;
I’d love to be able to say @event.students << Person.find(params[:id])
and
have a new row created in participations with the correct person and a
role
id of 2 (let’s say). Then when I write @event.instructors <<
Person.find(params[:id])
it would create a new row with the person id and a role id of 1. Is
this
possible using standard rails relationships?
To sum it up, I’m looking for a has_many :through relationship where the
“through” is a rails-polymorphic table with one field defined by the
relationship (role_id - always the same).
I know how to accomplish this by writing my own methods (which is how I
have
it now), but I’d like to know if there is a slick way to do this via
built-in relationships.
Thanks in advance -