-1

ich folgendes Setup:in Schienen in einem has_many Umfang selbst beziehen Der Versuch 5

class TeamEnrollment < ApplicationRecord 
    belongs_to :team 
    has_many :term_enrollments, through: :team 
end 

Der obige Code funktioniert gut. Jetzt muss ich die has_many Linie wie folgt aussehen ändern:

has_many :term_enrollments, 
    -> {where("(term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?) OR (term_enrollments.term_start_date >= ? AND term_enrollments.term_end_date > ?) OR (term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?)", self.start_date, self.start_date, self.start_date, self.termination_date, self.termination_date, self.termination_date)} 
    , through: :team 

Aus dem obigen Code, ich folgende Fehlermeldung erhalten, wenn ich versuche, TeamEnrollment.first.term_enrollments zu tun:

undefined method `start_date' for #<TermEnrollment::ActiveRecord_Relation:0x007ff706550550> 

ich die where Klausel getestet mit der ersten Konfiguration von Code oben und es funktioniert gut. Es ist nur, wenn in der has_many -Klausel, dass es nicht funktioniert. Ich bin mir ziemlich sicher, dass es mit der Verwendung von selbst innerhalb der has_many through zu tun hat. Ich versuche, auf das start_date des TeamEnrollments zu verweisen. Wie mache ich das?

Antwort

0

Die has_many Dokumentation Abschnitt über Bereiche zeigt das folgende Beispiel:

has_many :posts, ->(blog) { where("max_post_length > ?", blog.max_post_length) } 

Das Beispiel zeigt, dass die scope einen Parameter annehmen kann, das ist der Datensatz auf

genannt wird