所以我有3个模型。 EducationBoard,等级和科目。EducationBoard可以具有许多/不同的等级,并且等级将属于许多课程。现在与年级和主题相同。一个年级可以有多个科目,并且可以属于多个年级。所以我做到了。
class EducationBoard < ApplicationRecord
has_many :education_board_grades
has_many :grades, -> {includes :subjects}, through: :education_board_grades, dependent: :delete_all
end
class Grade < ApplicationRecord
has_many :education_board_grades, dependent: :destroy
has_many :education_boards, :through => :education_board_grades, dependent: :delete_all
has_many :grade_subjects
has_many :subjects, :through => :grade_subjects, dependent: :delete_all
end
class Subject < ApplicationRecord
has_many :grade_subjects
has_many :grades, :through => :grade_subjects, dependent: :delete_all
end
现在,我可以将板与等级关联,并将等级与主题关联。但是,我无法获得属于特定委员会的特定年级的学科。
即如果我想为EducationBoard StateBoard的一年级所有科目
做EducationBoard.find_by_name('StateBoard').grades.find_by_name('1').subjects
将返回所有与1年级相关且显然不是董事会特定的主题。因为它只是从grade_subjects关联表中查询grade_id
和subject_id
外键。
现在要进行快速修复(我没有时间),我被迫将一个education_board_id
异物放入grade_subjects表中。但是Rails关联仅考虑2个外键(grade_id
和subject_id
),而忽略了我添加的board_id
。因此,我最终手动运行了一个匹配3个外键条件的查询。
subject_ids = GradeSubject.where(grade_id: grade_id, education_board_id: education_board_id).pluck(:subject_id)
@subjects = Subject.where(:id => subject_ids).select(:id, :subject)
我应该如何对此进行映射,以便可以访问EducationBoard的->一年级的->主题
感谢您的帮助。谢谢。
我记得尝试创建一个education_board_subjects关联,但是由于它无法使映射正常工作,因此无法正常工作。这是要走的路吗?不知道我在做什么错,所以我被迫在grade_subjects关联表中输入board_id外键