علاقات متعددة للنموذج نفسه في القضبان

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.

تحرير: يجب أن يكون المدربون والطلاب هم أنفسهم . يمكن للمعلمين أن يكونوا طلابًا في فصول أخرى ، والعكس صحيح.

أنا متأكد من أن هذا أمر سهل للغاية ، ولكن Google لا تسحب أي شيء ذي صلة ، ولا أجده في كتبي.

0
وأضاف تحرير
الآراء: 2

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

فقط تذكر أنه بالنسبة لوراثة جدول واحد للعمل ، فإنك تحتاج إلى عمود اكتب في جدول أشخاص .

باستخدام نموذج جمعية قد يحل مشكلتك

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, مصدر
هاها ، كان هذا منذ زمن طويل ولكن لا ينبغي أن تكون العلاقات بين العديد من: من خلال الذهاب "الاتجاهات"؟ يجب أن يكون الشخص قادرًا على تدريس أكثر من دورة واحدة؟
وأضاف المؤلف wuliwong, مصدر

في حالتي لدي نموذج الأصول والمستخدم يمكن إنشاء الأصل بواسطة مستخدم ويمكن تعيينه لمستخدم ويمكن للمستخدم إنشاء العديد من الأصول ويمكن أن يكون لديه العديد من الأصول كان حل مشكلتي     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
وأضاف
ألا يقيد هذا الشخص في الحصول على واحد على الأقل من دورة تدريبية واحدة و course_instructor واحد؟ أعتقد أن وضعه بالكامل يجب أن يكون هناك العديد من الجهات: من خلال الجمعيات.
وأضاف المؤلف wuliwong, مصدر