Ruby on rails rails-我的关联正确吗?

Ruby on rails rails-我的关联正确吗?,ruby-on-rails,associations,Ruby On Rails,Associations,我正在开始我的第一个rails应用程序,我只想确保我的关联会像我希望的那样工作。以下是我的应用程序中模型的概述: class School < ActiveRecord::Base has_many :courses has_many :teachers, :through => :courses has_many :students, :through => :courses end class Course < ActiveRecord::Base

我正在开始我的第一个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,但我不想这么做。因此,我想知道是否有更好的方法可以做到这一点。

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

has_many :teachers, through: :courses, -> { distinct }
看看这个话题


关于额外的
:学校id
,如果
学生或
教师与
学校的关联仅由其注册或教授
课程定义,我认为在你的
老师和
家长
上指定
:school\u id
栏没有立即的问题,如果是我,我不会让老师或学生从属于课程,而是直接属于学校。没有课程就没有老师吗?你是学生吗

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

也许:

学校,有很多教员,有很多学生,有很多课程

教员,有很多教诲,通过教诲有很多课程

学生,有许多注册,通过注册有许多课程

课程,有许多注册,有许多学生通过注册,有许多教学,有许多教员通过教学

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


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

我认为你应该在教师和学生模型中添加学校id,然后建立学校与他们之间的直接联系。通过使用HABTM协会,您将始终获得dup记录。太棒了,这更接近我脑海中的想法。尽管如此,削减师资和教学,只增加教师是否有效?我希望每门课程都有一名教师,但教师可以有多门课程。我想我可以通过“教师有很多:课程”和“课程属于:教师”来实现我的目标,但对我来说,这门课程属于一名教师似乎很奇怪。对我来说,一门课程只有一名教师在语义上更有意义,但根据我的理解,这会将外键添加到教师模型中,以便教师只能有一门课程。那么,让课程属于教师是我的最佳选择吗?至少在我的头脑中,教师没有那么多“自己的”课程(课程也没有“自己的”教师),但教师通过被指定教授课程而与课程有关联。教师可以没有课程而存在,课程也可以没有教师而存在。如果某门课程的老师不得不在期中/年中/任何时候改变,那么结束当前的教学关系并开始新的教学关系都是微不足道的。我的解释可能过于宽泛,但我也觉得你的解释有点过于狭隘。最后,这是你的设计,所以设计要最好地回答你的用例。