Múltiplas relações para o mesmo modelo no 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.

Edit: Instrutores e Alunos devem ser o mesmo; os instrutores poderiam ser alunos de outras classes e vice-versa.

Tenho certeza de que isso é muito fácil, mas o Google não está trazendo nada relevante e eu simplesmente não estou achando isso nos meus livros.

0
adicionado editado
Visualizações: 2

2 Respostas

Há muitas opções aqui, mas supondo que os instrutores são sempre instrutores e os alunos são sempre estudantes, você pode usar herança:

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

então

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

Apenas lembre-se que para herança de tabela única funcionar, você precisa de uma coluna type na tabela people .

usar um modelo de associação pode resolver seu 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
adicionado
Ei, isso é muito inteligente, mas infelizmente, alguém pode ser tanto um instrutor quanto um aluno, então não acho que isso funcionará como está.
adicionado o autor Tim Sullivan, fonte
Ah, acabei de ver sua edição! Fantástico!
adicionado o autor Tim Sullivan, fonte
haha, isso foi há muito tempo, mas os relacionamentos não devem ser has'many: através de ambas as "direções"? Uma pessoa deve ser capaz de ensinar mais de um curso?
adicionado o autor wuliwong, fonte

no meu caso eu tenho o modelo Asset eUser O ativo pode ser criado por um usuário e pode ser atribuído a um usuário e o usuário pode criar muitos ativos e pode ter muitos ativos solução do meu problema foi     asset.rb

class Asset < ActiveRecord::Base

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

end

e

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

então sua solução poderia ser

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

e

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

end
0
adicionado
Isso não restringe a pessoa a ter no máximo um course_enrolled e um course_instructor? Eu acho que para configurar completamente eles têm que ser has_many: através de associações.
adicionado o autor wuliwong, fonte