gpt4 book ai didi

ruby-on-rails - Rails has_many :through with namespace - uninitialized constant

转载 作者:行者123 更新时间:2023-12-03 14:26:05 24 4
gpt4 key购买 nike

我在 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

入学/申请.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_studentsstudentsApplication 开始,关联都正常运行.我还可以检索 ApplicationStudent 的集合来自 admission_application_students 的记录协会在 Student .如 Student知道如何做到这一点,似乎是 :source一定是问题,但我从昨天开始一直在研究和测试,我不再觉得自己在进步。任何帮助,将不胜感激。

最佳答案

您需要指定 class_nameadmission_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 .

关于ruby-on-rails - Rails has_many :through with namespace - uninitialized constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47561096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com