我在Rails 5中定义has_many:through关系时遇到了一些麻烦,其中连接和目标模型都位于命名空间中。 我有一个Student模型,我想通过Admission::ApplicationStudent加入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和students关联都在Application正常运行。 我还可以从Student上的admission_application_students关联中检索ApplicationStudent记录的集合。 如果Student知道如何做到这一点,它看起来像:source必须是问题,但我从昨天开始一直在进行研究和测试,我不再感觉自己正在取得进展。 任何帮助,将不胜感激。
I'm having some trouble defining a has_many :through relationship in Rails 5 where the join and target models both reside within a namespace. I have a Student model that I want to join to Admission::Application through Admission::ApplicationStudent. When I attempt to access the admission_applications association I get a NameError: "uninitialized constant Student::Application".
Here are my model definitions:
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 endadmission/application_student.rb
class Admission::ApplicationStudent < ApplicationRecord belongs_to :application belongs_to :student, class_name: 'Student', inverse_of: :admission_application_students endadmission/application.rb
class Admission::Application < ApplicationRecord has_many :application_students has_many :students, through: :application_students, source: :student endIncidentally, I generated all three models with standard commands:
rails g model student rails g model 'Admission::Application' rails g model 'Admission::ApplicationStudent'The application_students and students associations are both functioning correctly from Application. I can also retrieve a collection of ApplicationStudent records from the admission_application_students association on Student. If Student knows how to make it that far, it seems like :source has to be the problem, but I've been researching and testing since yesterday, and I no longer feel like I'm making progress. Any help would be appreciated.
最满意答案
您需要为admission_applications关联指定class_name ,因为它也位于不同的命名空间中:
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 活动记录关联指南控制关联范围” 。
You need to specify the class_name for admission_applications association since it is also in a different namespace:
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' endFor more information see the documentation for has_many and Section 3.4 Controlling Association Scope of the Active Record Associations Guide.
更多推荐
发布评论