假设我有一门课程,学生可以通过其成员注册(例如,课程和学生的has_and_belongs_to_many relationsip)。有些成员是学生谁只是观察类(不适用于信用卡等),所以:如何使用has_many创建新记录:through和honor:conditions?
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),观察者= TRUE)
而是我得到:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
我敢肯定,我完全不知道这件事,并会欣赏任何见解!我也尝试在Membership模型上使用命名范围来做到这一点,但我似乎无法得到has_many在关联中使用范围。
非常感谢您的帮助!
谢谢!!很有帮助!唉,仍然不是100%。 sql: c.observers.create!(:name =>'abby')=> 学生创建(2.0ms)INSERT INTO“students”(“name”,“updated_at”, “created_at”)VALUES('abby','2009-1 0-04 12:41:35','2009-10-04 12:41:35') Membership Create(0。0)INSERT INTO“memberships”(“observer”,“updated_at”,“student_id”,“course_id”,“ created_at”)VALUES(NULL,'2009-10-04 12:41:35',4,2, '2009-10-04 12:41:35') **请注意观察者的值(NULL)。 – Eric 2009-10-04 12:48:01
愚蠢的问题:这个问题仍然存在或散列条件工作正常时建立一个记录? (设置'observer:true')。或者也许有更好的方法(我们正在谈论rails4) – 2014-03-24 14:33:31