ruby on rails - modelos - MĂșltiples relaciones con el mismo modelo en Rails
relationship rails 5 (2)
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
Recuerde que para que la herencia de tabla única funcione, necesita una columna de type
en la tabla de 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
Digamos que tengo dos modelos, Clases y Personas. Una clase puede tener una o dos personas como instructores y veinte personas como estudiantes. Por lo tanto, necesito tener múltiples relaciones entre los modelos, uno donde sea 1-> M para instructores, y uno donde sea 1> M para los estudiantes.
Editar: los instructores y los estudiantes deben ser iguales; 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.
en mi caso, tengo el Asset y el modelo de usuario. Asset puede ser creado por un usuario y puede asignarse a un usuario. El usuario puede crear muchos activos y puede tener muchos activos. La solución de mi problema fue 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