Ich habe einige Probleme bei der Definition einer has_many: through-Beziehung in Rails 5, wo die Join-und Zielmodelle beide in einem Namespace befinden. Ich habe ein Student
Modell, das ich zu Admission::Application
durch Admission::ApplicationStudent
beitreten möchte. Wenn ich versuche, auf die admission_applications
Verbindung zuzugreifen, erhalte ich einen NameError: "nicht initialisierte Konstante Student :: Application".Rails has_many: through mit Namespace - nicht initialisierte Konstante
Hier sind meine Modelldefinitionen:
student.rb
class Student < ApplicationRecord
has_many :admission_application_students,
class_name: 'Admission::ApplicationStudent',
inverse_of: :student
has_many :admission_applications,
through: :admission_application_students,
source: :application
end
Eintritt/application_student.rb
class Admission::ApplicationStudent < ApplicationRecord
belongs_to :application
belongs_to :student,
class_name: 'Student',
inverse_of: :admission_application_students
end
Eintritt/application.rb
Übrigensclass Admission::Application < ApplicationRecord
has_many :application_students
has_many :students,
through: :application_students,
source: :student
end
, I erzeugt alle drei Modelle mit Standardbefehle:
rails g model student
rails g model 'Admission::Application'
rails g model 'Admission::ApplicationStudent'
Die application_students
und students
Verbände sind beide korrekt von Application
funktionieren. Ich kann auch eine Sammlung von ApplicationStudent
Aufzeichnungen von der admission_application_students
Vereinigung auf Student
abrufen. Wenn Student
weiß, wie man es so weit macht, scheint es, als hätte :source
das Problem zu sein, aber ich habe seit gestern recherchiert und getestet, und ich habe nicht mehr das Gefühl, dass ich Fortschritte mache. Jede Hilfe wäre willkommen.
Sie sind absolut richtig und ich danke Ihnen. Ich könnte schwören, dass ich irgendwo gelesen habe: class_name wird ignoriert, wenn: source verwendet wird. Bin ich verrückt zu denken, dass der Klassenname hier hergeleitet werden könnte? ApplicationStudent kann bereits die Anwendungszuordnung auflösen, auf die verwiesen wird: source. Das fühlt sich wie ein seltener Zusammenbruch der Magie von Rails an. – allknowingfrog