2016-06-04 11 views
1

Ich brauche Hilfe, die die Beziehungen zwischen drei Modellen in Schienen Lehrer zu strukturieren, Betreff und StudentenBeziehungen zwischen 3 Modellen in Schienen (Lehrer, Betreff: Student)

Ich weiß nicht, ob es möglich ist, aber ich so hoffen

ein Schüler in mehreren Fächern sein kann, und er gehört zu einem Lehrer

ein Thema mehr Schüler haben kann, und es gehört zu einem Lehrer

Lehrer in der Lage sein können, Themen und Zugang zu hinzufügen alles Schüler s

Antwort

1

Sie möchten Ruby on Rails Associations (http://guides.rubyonrails.org/association_basics.html) lernen.

Es gibt:

  1. has_many
  2. has_one

Jetzt in Ihrem speziellen Fall, dass Sie Ihr machen müssen:

class Subject < ActiveRecord::Base 
    has_many :students 
    belongs_to :teacher 
end 

class Student < ActiveRecord::Base 
    belongs_to :teacher 
    has_many :subjects 
end 

class Teacher < ActiveRecord::Base 
    has_many :students 
    has_many :subjects 
end 

Sie müssen auch bestimmte Migrationen erstellen

Ihre Migrationen müssen auch Referenzen haben! http://edgeguides.rubyonrails.org/active_record_migrations.html

Es gibt gute Schienen g Migrationsansatz können Sie Verweise auf den vorhandenen Modell hinzufügen:

$ bin/rails generate migration AddStudentRefToSubjects student:references 

was zurückgibt:

class AddStudentRefToSubjects < ActiveRecord::Migration 
    def change 
    add_reference :subjects, :student, index: true, foreign_key: true 
    end 
end 

Schließlich können Sie Ihre Instanzen durch (Beispiel) zugreifen

Subject.last.students // returns all students for last subject in your DB 
Teacher.last.students // returns all students for last teacher in your DB 
Subject.last.teacher // returns teacher instance of last subject 
0

Es ist nicht möglich, Beziehungen zu erstellen, die yo Du willst nur mit diesen drei Modellen. Da Sie viele zu viele Beziehung zwischen Subjekt und Schüler haben, müssen Sie ein weiteres Modell erstellen, und hat viele durch die Assoziation zwischen Student und Fach, so etwas wie AttendingSubject und es sollte gehören: Student und gehören zu: Thema. class AttendingSubject < ActiveRecord::Base belongs_to :student belongs_to :subject end Dann gilt für Schüler benötigen Sie class Student < ActiveRecord::Base has_many :subjects, through: :attending_subjects belongs_to :teacher Und für Subject class Subject < ActiveRecord::Base has_many :subjects, through: :attending_subjects belongs_to :teacher end Und für Lehrer class Teacher < ActiveRecord::Base has_many :subjects has_many :students end Hier ist mehr über viele durch Vereinigung hat. http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

Verwandte Themen