我在使用Rails 5中的has_many:through关系时遇到一些麻烦,其中连接和目标模型都位于命名空间内。我有一个Student
模型,我希望通过Admission::Application
加入Admission::ApplicationStudent
。当我尝试访问admission_applications
关联时,我得到一个NameError:“未初始化的常量Student :: Application”。
以下是我的模型定义:
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
收/ application_student.rb
class Admission::ApplicationStudent < ApplicationRecord
belongs_to :application
belongs_to :student,
class_name: 'Student',
inverse_of: :admission_application_students
end
收/ application.rb中
class Admission::Application < ApplicationRecord
has_many :application_students
has_many :students,
through: :application_students,
source: :student
end
顺便说一句,我使用标准命令生成了所有三个模型:
rails g model student
rails g model 'Admission::Application'
rails g model 'Admission::ApplicationStudent'
来自application_students
的{{1}}和students
关联都正常运作。我还可以从Application
上的ApplicationStudent
关联中检索admission_application_students
条记录的集合。如果Student
知道如何做到这一点,似乎Student
似乎是问题,但我从昨天开始一直在研究和测试,我不再觉得我正在取得进展。任何帮助将不胜感激。
答案 0 :(得分:3)
您需要为class_name
关联指定admission_applications
,因为它也位于不同的命名空间中:
class Student < ApplicationRecord
has_many :admission_application_students, class_name: 'Admission::ApplicationStudent'
has_many :admission_applications,
through: :admission_application_students,
source: :application,
class_name: 'Admission::Application'
end
有关详细信息,请参阅has_many的文档和第{3.4节控制Active Record Associations Guide的关联范围。