Множественные отношения к одной модели в 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.

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

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

0
добавлено отредактировано
Просмотры: 100

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
0
добавлено
Эй, это довольно умно, но, к сожалению, кто-то может быть и инструктором, и учеником, поэтому я не думаю, что это будет работать как есть.
добавлено автор Tim Sullivan, источник
Ах, просто видел твою правку! Фантастика!
добавлено автор Tim Sullivan, источник
ха-ха, это было давно, но не должно быть отношений с has_many: через оба «направления»? Человек должен уметь обучать более одного курса?
добавлено автор wuliwong, источник

в моем случае у меня есть модель Asset и User Активы могут быть созданы пользователем и могут быть назначены пользователю и Пользователь может создать много активов и может иметь много активов решение моей проблемы было     asset.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
0
добавлено
Разве это не ограничивает Личность наличием не более одного курса и одного курса_инструктора? Я думаю, чтобы полностью настроить его, они должны быть has_many: через ассоциации.
добавлено автор wuliwong, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff