【发布时间】:2010-12-03 15:31:36
【问题描述】:
假设我有一门课程,学生可以通过会员资格注册(例如课程和学生的 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')
我原以为可以使用关联建立新记录,并且会生成:
- 新的学生记录('Joe Student')
- 新的会员记录(course_id = 37,student_id = (joe),observer = true)
但是我得到了:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
我确信我完全不知道这是怎么回事,如果有任何见解,我将不胜感激!我也尝试使用 Membership 模型上的命名范围来执行此操作,但我似乎无法让 has_many 在关联中使用范围。
非常感谢您提供的任何帮助!
【问题讨论】:
标签: ruby-on-rails activerecord associations has-many-through