Daha gelişmiş dernekler öğrenmeye başlıyorum ve polimorfik birleşim tablosu çok ilginç görünüyor, ama kötü bir sınırlamaya vardım.Rails polimorfik birleşim tablosu her iki yönde de çalışır
Benim modeller:
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:
shugenja_school ve monk_schools, basic_primary_school ile aynı ilişkilendirmeye sahiptir.
Ve katılmak modeli kendini: Okul tarafında iyi katılır
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
, ben school.class_schools yapabilir ve ben ilişkili school_classes dizisi olsun. Ama diğer tarafta da aynı şeyi yapamam. Aslında school_class.classes_of okullarını kontrol ettiğimde boş dizim oluyor. Böyle işlevi tarafından benim tohum dosyasında ilişkilendirmeleri yapmak:
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
Sorum:
Nasıl bu dernek her iki yönde çalışır hale getirebiliriz? Bu nedenle, bu nesneye ilişkilendirilmiş tüm nesneler için ClassSchool.first.class_of_schools
dönüşlerini arayabilirim. Ve hala school_class
nesnelerini almak için BasicPrimarySchool.first.school_classes
'u arayabiliriz.
için
SchoolClass
yılında ilişkisias: :school_model
kaldırmak Bu nesnelerin :) ancak SchoolClass.first.basic_primary_schools'u almaya çalıştığımda, ActiveRecord :: HasManyThroughSourceAssociationNotFoundError: Kaynak ilişkilendirmelerini bulamadılar – KazikBu sorunu çözmek için düzenlemeyi kontrol edin –
Doğru cevap, 'has_many: basic_primary_schools, through:: class_of_schools, source:: school_model, source_type: "BasicPrimarySchool" 'Ama cevabı doğru olarak işaretleyeceğim, lütfen güncelleyiniz. – Kazik