Wie kann ich mit has_many: through and honor: conditions neue Datensätze erstellen?

Nehmen wir an, ich habe einen Kurs, in den sich Studenten über eine Mitgliedschaft einschreiben können (z. B. eine Beziehung von has_and_belongs_to_many zwischen Kursen und Studenten). Einige Mitgliedschaften sind für Schüler gedacht, die nur die Klasse beobachten (nicht für Credits usw.).

class Course < ActiveRecord::Base
  has_many :memberships

  has_many :students,
           :through => :memberships

  has_many :observers,
           :through => :memberships,
           :source => :student,
           :conditions => { :memberships => { :observer => true }}
end

Folgendes funktioniert hervorragend:

observers = Course.find(37).observers

Folgendes funktioniert nicht:

new_observer = Course.find(37).observers.build(:name => 'Joe Student')

Ich hätte gedacht, dass man mit der Assoziation neue Datensätze erstellen könnte und das hätte erzeugt:

Ein neuer Schülerrekord ('Joe Student')Ein neuer Mitgliedschaftsdatensatz (course_id = 37, student_id = (joe), observer = true)

Aber stattdessen bekomme ich:

ActiveRecord::AssociationTypeMismatch: Membership expected, got Array

Ich bin sicher, ich bin total verwirrt darüber und würde mich über Erkenntnisse freuen! Ich habe auch versucht, dies mit benannten Gültigkeitsbereichen im Mitgliedschaftsmodell zu tun, aber ich kann has_many anscheinend nicht dazu bringen, einen Gültigkeitsbereich in der Zuordnung zu verwenden.

Vielen Dank für jede mögliche Hilfe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage