我正在开始我的第一个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,但我不想这样做。所以我想知道是否有更好的方法可以做到这一点。
答案 0 :(得分:1)
如果是我,我不会让老师或学生参加课程,而是直接到学校。没有课程,老师不存在吗?同样是学生?
我会使用定义的模型将教师和学生连接到课程,而不是通用的habtm - 定义的模型可以让您轻松存储其他属性 - 例如,学生可能会有课程成绩。
也许:
学校,有很多教师,有很多学生,有很多课程。教师,有许多教义,通过教学有很多课程。
学生,有很多注册,通过注册有很多课程。
当然,有很多注册,有很多学生通过注册,有很多教诲,有很多教师通过教学。
教学,属于教师,属于课程。
注册,属于学生,属于课程。
答案 1 :(得分:0)
关于您对唯一约束的兴趣,您实际上可以指定has_many :through
仅返回唯一记录。
has_many :teachers, through: :courses, -> { distinct }
查看有关该主题的the Rails Guide。
关于其他:school_id
,如果Student
或Teacher
与School
的关联完全是由他们注册或教授{{1} },我发现不指定Course
和:school_id
上的Teacher
列并且Parent