假設我有一門課程,學生可以通過其成員註冊(例如,課程和學生的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