Ruby on Rails 模型关联(多对多关系)

本文介绍了Ruby on Rails中如何实现多对多关系模型,并举例说明了如何通过中间表关联User与Book、Grade与Student等模型,同时展示了如何查询特定用户借阅的书籍或特定年级的所有学生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很基础,但是却搞很久,在这里总结一下。

class User < ActiveRecord::Base
  has_many :borrows
  has_many :books, :through => :borrows
end
class Book < ActiveRecord::Base
  has_many :borrows
  has_many :users, :through => :borrows
end
class Borrow < ActiveRecord::Base
  belongs_to :user
  belongs_to :book
end

非常基础的多对多关系模型,需要注意的是申明的时候,不但要申明 has_many 另一个模型,同样要申明 has_many 创建的关系表,这里User和Book是一个多对多关系,他们的关系为Borrow。之后,

@user.books
@book.users

就能查询出某个用户借阅了哪些书,某本书被哪些用户借阅了。

引申一下,多表关联,

class Grade < ActiveRecord::Base
    has_many :classrooms
    has_many :students, :through => :classrooms
end
class Classroom < ActiveRecord::Base
    belongs_to :Grade
    has_many :students
end
class Student < ActiveRecord::Base
    belongs_to :Classroom
end

年级类Grade有多个班级Classroom,班级有多个学生Student,通过 has_many, :through 的方式,就能查询到这个年级下的所有学生。

@grade.students

可以再引申出,一对一对一的关系模型。

转载于:https://www.cnblogs.com/zhangwending/archive/2013/05/21/3091745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值