मान लें कि मेरे पास एक कोर्स है जिसमें छात्र सदस्यता के माध्यम से नामांकन कर सकते हैं (उदाहरण के लिए पाठ्यक्रम और छात्रों के has_and_belongs_to_many संबंध)। कुछ सदस्यता जो अभी (आदि क्रेडिट नहीं करने के लिए,) वर्ग देख रहे हैं छात्रों के लिए हैं, इसलिए:मैं has_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')
मैं सोचा होगा कि एक संघ का उपयोग कर नए रिकॉर्ड बना सकते हैं और है कि उत्पन्न होता है:
- एक नया छात्र रिकॉर्ड ('जो छात्र')
- एक नई सदस्यता रिकॉर्ड (course_id = 37, student_id = (जो), पर्यवेक्षक = true)
लेकिन बजाय मैं:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
मुझे यकीन है कि मैं इस बारे में पूरी तरह से उलझन में हूं और यह किसी भी अंतर्दृष्टि की सराहना करता हूं! मैंने सदस्यता मॉडल पर नामित स्कोप के साथ ऐसा करने का भी प्रयास किया है, लेकिन मुझे लगता है कि एसोसिएशन में एक दायरा का उपयोग करने के लिए है Imany।
किसी भी मदद के लिए बहुत बहुत धन्यवाद!
धन्यवाद !! बहुत उपयोगी! हां, अभी भी काफी 100% नहीं है। पर्यवेक्षक बूलियन एसक्यूएल में सेट नहीं है: c.observers.create! (: Name => 'abby') => छात्र "(" नाम "," अपडेट_ट "में छात्र बनाएं (2.0ms) इंसर्ट करें, "बनाया_at") VALUES ('abby', '200-1-0-04 12:41:35', '2009-10-04 12:41:35') सदस्यता बनाएं (0।0 एमएमएस) "सदस्यता" ("पर्यवेक्षक", "अपडेट_एट", "student_id", "course_id", " बनाया_at" में प्रवेश करें) मूल्य (पूर्ण, '200 9 -10 12:41:35', 4, 2, '2009-10-04 12:41:35') ** पर्यवेक्षक के लिए मूल्य (एनयूएलएल) नोट करें। – Eric
बेवकूफ सवाल: क्या यह मुद्दा अभी भी मौजूद है या रिकॉर्ड बनाने के दौरान हैश की स्थिति ठीक काम करती है? (सेटिंग 'पर्यवेक्षक: सत्य')। या शायद एक बेहतर तरीका है (हम रेल 4 के बारे में बात कर रहे हैं) –