2016-04-03 14 views
0

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.

cevap

0

Sadece SchoolClass ilişkin

has_many :class_of_schools, dependent: :destroy 

DÜZENLEME

değişikliği O şimdi dizi döndürür school_class.classes_of_school için olarak çalıştı

has_many :basic_primary_schools, through: :class_of_schools, source: :school_model, source_type: "BasicPrimarySchool"

+0

için SchoolClass yılında ilişkisi as: :school_model kaldırmak Bu nesnelerin :) ancak SchoolClass.first.basic_primary_schools'u almaya çalıştığımda, ActiveRecord :: HasManyThroughSourceAssociationNotFoundError: Kaynak ilişkilendirmelerini bulamadılar – Kazik

+0

Bu sorunu çözmek için düzenlemeyi kontrol edin –

+1

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

İlgili konular