Let's say I have a Course in which Students can enroll via a Membership (e.g. a has_and_belongs_to_many relationsip of Courses and Students). Some memberships are for students who are just observing the class (not for credit, etc.), so:
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
Here's what works great:
observers = Course.find(37).observers
Here's what doesn't work:
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
I would have thought that one could build new records using the association and that would have generated:
- A new Student record ('Joe Student')
- A new Membership record (course_id = 37, student_id = (joe), observer = true)
But instead I get:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
I'm sure I'm totally confused about how this and would appreciate any insights! I've also tried to do this with named scopes on the Membership model, but I can't seem to get has_many to use a scope in the association.
Thanks so much for any help possible!