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

假设我有一个课程,学生可以通过会员注册(例如课程和学生的has_and_belongs_to_many关系)。 有些会员资格是针对刚刚观看课程的学生(不是为了学分等),所以:

class Course  :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') 

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

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

但相反,我得到:

 ActiveRecord::AssociationTypeMismatch: Membership expected, got Array 

我敢肯定,我对这是多么的困惑,并会欣赏任何见解! 我也尝试在Membership模型上使用命名作用域执行此操作,但我似乎无法使用has_many在关联中使用作用域。

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

我相信你遇到了一个Rails错误。 我在我的盒子上尝试了相同的东西(2.3.4),它给了我同样的错误,这似乎根本不对。 另外我还尝试了以下方法:

 course = Course.first course.observers << Student.create(:name => "Joe Student") course.save 

但这会创建一个观察者字段设置为false的成员资格!

我想出的最后一个丑陋的解决方法是手动创建Membership记录:

 Membership.create!(:course => Course.first, :student => Student.first, :observer => true) 

我为此创造了一张票 ,我将在早餐后进一步调查。

编辑 :我已按照承诺进一步调查并发现您是否更改了:conditions哈希到数组,例如:

 :conditions => ["memberships.observer = ?", true] 

它按预期工作。 我还有一个github存储库,其中包含示例代码和复制指令。