0

Ich habe folgendes has_many: durch Situation:has_many: durch nur in einer Richtung arbeiten

class User < ApplicationRecord 
    has_many :term_enrollments, foreign_key: 'builder_id' 
    has_many :terms, through: :term_enrollments 
end 

class TermEnrollment < ApplicationRecord 
    belongs_to :term 
    belongs_to :builder, class_name: 'User' 
end 

class Term < ApplicationRecord 
    has_many :builder_term_enrollments, class_name: 'TermEnrollment', foreign_key: 'builder_id' 
    has_many :builders, through: :builder_term_enrollments, source: :builder 
end 

Die folgende schafft erfolgreich ein term_enrollment:

u = User.first 
t = Term.first 
u.terms << t 

dann kann ich u.terms erfolgreich laufen. Das Problem ist, wenn ich t.builders laufen, ich ein leeres Verein erhalten:

=> #<ActiveRecord::Associations::CollectionProxy []> 

Ich bin ziemlich sicher, ich bin mit source falsch, aber ich bin nicht sicher, wie. Wie behebe ich das?

+0

ich ziemlich sicher bin, du bist nach 'inverse_of', nicht' source', bevölkerten die beiden Enden des Vereins zu haben – meagar

Antwort

0

Können Sie versuchen, den Fremdschlüssel unter :builder_term_enrollments auf 'term_id' oder :term_id einzustellen?

Das wird ActiveRecord aktivieren, um alle Zeilen zu finden, die die entsprechende term_id haben.

0

Umschreiben der Begriff Modell es fest:

class Term < ApplicationRecord 
    has_many :builder_term_enrollments, class_name: 'TermEnrollment', source: :builder 
    has_many :builders, through: :builder_term_enrollments 
end