假设我有一门课程,学生可以通过会员资格注册(例如课程和学生的 has_and_belongs_to_many 关系)。一些会员资格适用于只是观察课程的学生(不是为了学分等),所以:
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
以下是最有效的方法:
observers = Course.find(37).observers
这是不起作用的:
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
我原以为可以使用该关联建立新记录,这会产生:
- 新的学生记录(“乔学生”)
- 新的会员记录(course_id = 37,student_id = (joe),observer = true)
但相反,我得到:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
我敢肯定,我对此完全感到困惑,并希望有任何见解!我也尝试在 Membership 模型上使用命名范围来执行此操作,但我似乎无法让 has_many 在关联中使用范围。
非常感谢您提供的任何帮助!