rails - 我的关联是否正确?

时间:2013-08-27 03:45:38

标签: 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
  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,但我不想这样做。所以我想知道是否有更好的方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

如果是我,我不会让老师或学生参加课程,而是直接到学校。没有课程,老师不存在吗?同样是学生?

我会使用定义的模型将教师和学生连接到课程,而不是通用的habtm - 定义的模型可以让您轻松存储其他属性 - 例如,学生可能会有课程成绩。

也许:

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

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

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

当然,有很多注册,有很多学生通过注册,有很多教诲,有很多教师通过教学。

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

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

答案 1 :(得分:0)

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

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

查看有关该主题的the Rails Guide

关于其他:school_id,如果StudentTeacherSchool的关联完全是由他们注册或教授{{1} },我发现指定Course:school_id上的Teacher列并且Parent

没有立竿见影的问题