tabla relaciones rails modelos llaves intermedia foreign foraneas eliminar columna belong association ruby-on-rails

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