我开始学习更高级的关联,并且多态连接表看起来很有趣,但是我遇到了一个不好的限制。Rails多态连接表工作双向
我的模型:
school_class.rb:
class SchoolClass < ActiveRecord::Base
has_many :class_of_schools, as: :school_model, dependent: :destroy
has_many :basic_primary_schools, through: :class_of_schools
has_many :basic_shugenja_schools, through: :class_of_schools
has_many :basic_monk_schools, through: :class_of_schools
end
class_of_school.rb:
class ClassOfSchool < ActiveRecord::Base
belongs_to :school_model, polymorphic: true
belongs_to :school_class
end
basic_primary_School.rb:
class BasicPrimarySchool < ActiveRecord::Base
has_many :class_of_schools, as: :school_model, dependent: :destroy
has_many :school_classes, through: :class_of_schools
end
shugenja_school和monk_schools,与basic_primary_school具有相同的关联。
并加入模型,可以自:
class CreateClassOfSchools < ActiveRecord::Migration
def change
create_table :class_of_schools do |t|
t.integer :school_class_id
t.integer :school_model_id
t.string :school_model_type
t.timestamps null: false
end
end
end
它加入以及在校一面,我可以让school.class_schools,我也得到相关school_classes的阵列。但在另一方面,我不能这样做。事实上,当我检查school_class.classes_of学校时,我得到空阵列。 我让我的种子文件关联按功能如下:
def join_schools_with_classes(school_object_name, school_classes_array)
school_object_name.all.each do |school|
school_classes = school_classes_array[school.name]
school_classes.each do |class_name|
school_class = SchoolClass.find_by(name: class_name)
school.class_of_schools.create(school_class_id: school_class.id)
end
end
end
我的问题:
我怎样才能让这个关联是双向的?所以我可以拨打ClassSchool.first.class_of_schools
返回,所有与此对象关联的对象。仍然可以拨打BasicPrimarySchool.first.school_classes
获取关联的school_class
对象。
它的工作作为school_class.classes_of_school现在返回数组的关系那些对象:) 但是当我尝试获得SchoolClass.first.basic_primary_schools时,我得到'ActiveRecord :: HasManyThroughSourceAssociationNotFoundError:找不到源关联' – Kazik
检查编辑以解决该问题 –
正确的答案是'has_many:basic_primary_schools,通过::class_of_schools,来源::school_model,source_type:“BasicPrimarySchool”'但我会将答案标记为正确,请更新它。 – Kazik