0

我正在开始我的第一个 Rails 应用程序,我只想确保我的关联能够像我希望的那样工作。以下是我的应用程序中模型的概述:

class School < ActiveRecord::Base
  has_many :courses
  has_many :teachers, :through => :courses
  has_many :students, :through => :courses
end

class Course < ActiveRecord::Base
  belongs_to :school
  belongs_to :teacher
  has_and_belongs_to_many :students
end

class Teacher < ActiveRecord::Base
  has_many :courses
  has_many :students, :through => :courses
end

class Student < ActiveRecord::Base
  has_and_belongs_to_many :courses
  has_many :teachers, :through => :courses
end

到目前为止,我注意到的一件事是,如果我尝试让学校的老师或学生,它将多次返回相同的记录。我知道我可以只调用 uniq 但我宁愿不必这样做。所以我想知道是否有更好的方法可以做到这一点。

4

2 回答 2

1

如果是我,我不会让老师或学生服从课程,而是直接服从学校。没有课程就没有老师吗?同样是学生?

而且我会使用定义的模型将教师和学生与课程联系起来,而不是通用的 habtm——定义的模型让您可以轻松地存储其他属性——例如,学生可能有课程的成绩。

也许:

学校,有很多教师,有很多学生,有很多课程。

师资,有很多教义,有很多课程通过教义。

学生,有很多注册,通过注册有很多课程。

课程,有很多注册,有很多学生通过注册,有很多教学,有很多教师通过教学。

教学,属于师资,属于课程。

注册,属于学生,属于课程。

于 2013-08-27T04:43:29.993 回答
0

关于您对唯一约束的兴趣,您实际上可以指定has_many :through仅返回唯一记录。

has_many :teachers, through: :courses, -> { distinct }

查看有关该主题的 Rails 指南。

关于另外一个问题:school_id,如果 aStudent或与aTeacher的关联School纯粹是由他们在 a 中的注册或教学来定义的Course,我认为没有:school_id您的TeacherParent

于 2013-08-27T04:07:08.097 回答