当前位置:  开发笔记 > 后端 > 正文

与Rails中相同模型的多个关系

如何解决《与Rails中相同模型的多个关系》经验,为你挑选了2个好方法。

假设我有两个模型,Classes和People.一个班级可能有一两个人作为教师,二十个人作为学生.因此,我需要在模型之间建立多种关系 - 一种是教师的1-> M,另一种是学生的1-> M.

编辑:教师和学生必须是一样的; 教师可以是其他班级的学生,反之亦然.

我确信这很容易,但谷歌并没有提出任何相关内容,我只是没有在我的书中找到它.



1> kch..:

这里有很多选择,但假设教师总是教师,学生总是学生,你可以使用继承:

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

请记住,要使单表继承起作用,您需要typepeople表中使用一列.

使用关联模型可能会解决您的问题

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



2> Naveed..:

在我的情况下,我有资产和用户模型资产可以由用户创建,可以分配给用户,用户可以创建许多资产,可以有很多我的问题的资产解决方案是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

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有