Angenommen, ich habe einen Kurs, in dem sich Studierende über eine Mitgliedschaft anmelden können (z. B. eine has_and_belongs_to_many-Beziehung zu Kursen und Kursteilnehmern). Einige Mitgliedschaften sind für Studenten, die gerade die Klasse zu beobachten (nicht für Kredit, etc.), so:Wie kann ich neue Datensätze mit has_many: through und honor: conditions erstellen?
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
Hier ist, was funktioniert gut:
observers = Course.find(37).observers
Hier ist, was nicht funktioniert:
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
ich hätte gedacht, dass man neue Datensätze aufbauen könnte die Assoziation mit und erzeugt hätte:
- ein neuer Student Satz ('Joe Student)
- Eine neue Mitgliedschaft Rekord (course_id = 37, STUDENT_ID = (joe), Beobachter = true)
Aber stattdessen erhalte ich:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
Ich bin mir sicher, ich bin völlig verwirrt darüber, wie dies und würde jede Einsicht zu schätzen wissen! Ich habe auch versucht, dies mit benannten Bereichen im Membership-Modell zu tun, aber ich kann nicht scheinen, has_many zu bekommen, um einen Bereich in der Assoziation zu benutzen.
Vielen Dank für jede mögliche Hilfe!
Danke !! Sehr hilfreich! Leider immer noch nicht ganz 100%. Der Beobachter boolean wird nicht in sql gesetzt: c.observers.create! (: Name => 'abby') => Student Erstellen (2.0ms) INSERT INTO "Studenten" ("name", "updated_at", "created_at") VALUES ('abby', '2009-1 0-04 12:41:35', '2009-10-04 12:41:35') Mitgliedschaft erstellen (0.0 ms) INSERT INTO "Mitgliedschaften" ("Beobachter", "aktualisiert_at", "Schüler_ID", "Kurs_ID", " created_at") WERTE (NULL, '2009-10-04 12:41:35', 4, 2, '2009-10-04 12:41:35') ** Notieren Sie den Wert (NULL) für den Beobachter. – Eric
Dumm Frage: ist dieses Problem noch vorhanden oder Hash-Bedingungen funktionieren gut beim Erstellen eines Datensatzes? (Einstellung "Beobachter: wahr"). Oder vielleicht gibt es einen besseren Weg (wir sprechen über Rails4) –