ruby-on-rails - without - ruby on rails 5




Множественные отношения к одной модели в Rails (2)

Здесь много вариантов, но при условии, что инструкторы всегда являются инструкторами, а учащиеся всегда учатся, вы можете использовать наследование:

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

тогда

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

Просто помните, что для наследования одной таблицы для работы вам нужен столбец type в таблице people .

использование модели ассоциации может решить вашу проблему

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

Предположим, у меня две модели, классы и люди. У класса может быть один или два человека в качестве инструкторов и двадцать человек в качестве учеников. Поэтому мне нужно иметь несколько взаимосвязей между моделями - одно, где для инструкторов это 1-> M, и одно, где для студентов - это 1-> M.

Изменить: инструкторы и студенты должны быть одинаковыми; преподаватели могут быть учащимися в других классах, и наоборот.

Я уверен, что это довольно просто, но Google не подтягивает что-либо к делу, и я просто не нахожу его в своих книгах.


в моем случае у меня есть модель Asset и User Asset может быть создана пользователем и может быть назначена пользователю, и Пользователь может создать много активов и может иметь много решений по моей проблеме, это property.rb

class Asset < ActiveRecord::Base

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

end

а также

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

поэтому ваше решение может быть

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

а также

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

end






ruby-on-rails