रेल में एक ही मॉडल के लिए कई संबंध

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 उत्तर

यहां कई विकल्प हैं, लेकिन मानते हैं कि प्रशिक्षकों हमेशा प्रशिक्षक होते हैं और छात्र हमेशा छात्र होते हैं, आप विरासत का उपयोग कर सकते हैं:

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
जोड़ा
क्या यह व्यक्ति को सबसे अधिक पाठ्यक्रम_नोलॉल्ड और एक कोर्स_इन्स्ट्रक्टर रखने के लिए प्रतिबंधित नहीं करता है? मुझे लगता है कि इसे पूरी तरह से स्थापित करना है, उन्हें has_many होना चाहिए: एसोसिएशन के माध्यम से।
जोड़ा लेखक wuliwong, स्रोत