Múltiples relaciones con el mismo modelo en 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.

Editar: los instructores y los estudiantes deben ser los mismos; los instructores pueden ser estudiantes de otras clases, y viceversa.

Estoy seguro de que esto es bastante fácil, pero Google no está sacando nada relevante y simplemente no lo encuentro en mis libros.

0
agregado editado
Puntos de vista: 3

2 Respuestas

Aquí hay muchas opciones, pero suponiendo que los instructores siempre sean instructores y que los estudiantes siempre sean estudiantes, puede usar la herencia:

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

entonces

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

Solo recuerde que para que la herencia de tabla única funcione, necesita una columna type en la tabla people .

usar un modelo de asociación podría resolver su 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
agregado
Oye, eso es bastante ingenioso, pero desafortunadamente, alguien podría ser instructor y estudiante, así que no creo que esto funcione como está.
agregado el autor Tim Sullivan, fuente
¡Ah, acabo de ver tu edición! ¡Fantástico!
agregado el autor Tim Sullivan, fuente
jaja, esto fue hace mucho tiempo, pero ¿no deberían ser las relaciones has_many: a través de ambas "direcciones"? Una persona debería poder enseñar más de un curso?
agregado el autor wuliwong, fuente

en mi caso tengo el modelo de Activo y Usuario Un usuario puede crear el activo y se le puede asignar a un usuario y el usuario puede crear muchos activos y puede tener muchos activos solución de mi problema era     asset.rb

class Asset < ActiveRecord::Base

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

end

y

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

entonces tu solución podría 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

y

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

end
0
agregado
¿Esto no restringe a la Persona a tener como máximo un curso inscrito y un instructor de curso? Creo que para configurarlo completamente tienen que ser has_many: a través de asociaciones.
agregado el autor wuliwong, fuente