相关疑难解决方法(0)

如何使用has_many:through和honor:conditions创建新记录?

假设我有一个课程,学生可以通过会员注册(例如课程和学生的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
Run Code Online (Sandbox Code Playgroud)

这是有用的:

observers = Course.find(37).observers
Run Code Online (Sandbox Code Playgroud)

这是不起作用的:

new_observer = Course.find(37).observers.build(:name => 'Joe Student')
Run Code Online (Sandbox Code Playgroud)

我原本以为可以使用该关联构建新记录,这将产生:

  1. 新学生记录('Joe Student')
  2. 新的会员记录(course_id = 37,student_id =(joe),observer = true)

但相反,我得到:

ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
Run Code Online (Sandbox Code Playgroud)

我确信我对此如何完全感到困惑,并会欣赏任何见解!我也尝试在Membership模型上使用命名作用域执行此操作,但我似乎无法使用has_many在关联中使用作用域.

非常感谢您提供任何帮助!

activerecord ruby-on-rails associations has-many-through

9
推荐指数
1
解决办法
8336
查看次数