Rails模型关系咨询:无需额外表能否定义指定关联?
Rails模型关联需求解答:无需新增中间表能否实现?
当然可以!你完全不需要新增student_course中间表,只需要修改现有的模型代码就能实现所有需求。
你的核心需求里,Student是通过所属Group来关联Course的,而不是直接和Course建立多对多关系,所以利用Rails的through关联就能完美解决。
修改后的完整模型代码
class Student belongs_to :group # 新增这一行:通过所属group关联对应的courses has_many :courses, through: :group end class Group has_many :students has_many :courses end class Course belongs_to :group end
逻辑说明
- 原有的
Student belongs_to :group和Group has_many :students已经满足第一个需求; Group has_many :courses和Course belongs_to :group也已经满足第二个需求里Group与Course的关联;- 新增的
has_many :courses, through: :group会让Rails自动帮你完成关联:当你调用student.courses时,它会先获取该Student的group_id,再去courses表中筛选所有group_id匹配的记录,完全实现“Student通过所属Group关联多个Course”的需求。
举个实际使用的例子:
# 创建测试数据 group = Group.create(name: "编程一班") course1 = group.courses.create(name: "Ruby基础") course2 = group.courses.create(name: "Rails实战") student = group.students.create(name: "张三") # 获取该学生的所有课程 student.courses # => 返回包含course1和course2的集合
内容的提问来源于stack exchange,提问作者Kristiyan Tsvetanov
相关产品推荐
相关产品推荐

