Relații multiple cu același model în Rails

Let's say I have two models, Classes and People. A Class might have one or two People as instructors, and twenty people as students. So, I need to have multiple relationships between the models -- one where it's 1->M for instructors, and one where it's 1->M for students.

Editați: instructorii și elevii trebuie să fie aceiași; instructorii ar putea fi studenți în alte clase și invers.

Sunt sigur că acest lucru este destul de ușor, dar Google nu scoate nimic relevant și nu o găsesc în cărțile mele.

0

2 răspunsuri

Există multe opțiuni aici, dar presupunând că instructorii sunt mereu instructori, iar elevii sunt mereu studenți, puteți folosi moștenirea:

class Person < ActiveRecord::Base; end  # btw, model names are singular in rails
class Student < Person; end
class Instructor < Person; end

apoi

class Course < ActiveRecord::Base  # renamed here because class Class already exists in ruby
  has_many :students
  has_many :instructors
end

Amintiți-vă că pentru o moștenire de mese unică aveți nevoie de o coloană type în tabelul people .

folosirea unui model de asociere vă poate rezolva problema

class Course < ActiveRecord::Base
  has_many :studentships
  has_many :instructorships
  has_many :students,    :through => :studentships
  has_many :instructors, :through => :instructorships
end

class Studentship < ActiveRecord::Base
  belongs_to :course
  belongs_to :student, :class_name => "Person", :foreign_key => "student_id"
end

class Instructorship < ActiveRecord::Base
  belongs_to :course
  belongs_to :instructor, :class_name => "Person", :foreign_key => "instructor_id"
end
0
adăugat
Hei, asta e destul de inteligent, dar, din păcate, cineva ar putea fi atât un instructor, cât și un student, așa că nu cred că acest lucru va funcționa așa cum este.
adăugat autor Tim Sullivan, sursa
Ah, tocmai v-am văzut editarea! Fantastic!
adăugat autor Tim Sullivan, sursa
haha, aceasta a fost cu mult timp in urma, dar relatiile nu ar trebui sa fie has_many: prin "ambele" directii? O persoană ar trebui să poată preda mai multe cursuri?
adăugat autor wuliwong, sursa

în cazul meu am model de activ și de utilizator Activele pot fi create de un utilizator și pot fi atribuite unui utilizator iar utilizatorul poate crea multe active și poate avea mai multe active soluția problemei mele a fost     asset.rb

class Asset < ActiveRecord::Base

belongs_to :creator ,:class_name=>'User'
belongs_to :assigned_to, :class_name=>'User' 

end

și

user.rb

class User < ActiveRecord::Base

has_many :created_assets, :foreign_key => 'creator_id', :class_name => 'Asset'
has_many :assigned_assets , :foreign_key => 'assigned_to_id', :class_name => 'Asset'

end

deci soluția ta ar putea fi

class Course < ActiveRecord::Base
has_many :students ,:foreign_key => 'student_id', :class_name => 'Person'
has_many  :teachers, :foreign_key => 'teacher_id', :class_name => 'Person'

end

și

class Person < ActiveRecord::Base
belongs_to  :course_enrolled,:class_name=>'Course'
belongs_to  :course_instructor,:class_name=>'Course'

end
0
adăugat
Acest lucru nu restricționează Persoana să aibă cel mult o cursă și un curs_instructor? Cred că pentru a pune pe deplin acest lucru trebuie să fie has_many: prin asociații.
adăugat autor wuliwong, sursa