我開始學習更高級的關聯,並且多態連接表看起來很有趣,但是我遇到了一個不好的限制。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