Rails ActiveRecord数据库关系n:n

这篇博客介绍了如何在Rails ActiveRecord中处理n:n关系,包括创建中间表`assemblies_part`,在model中定义`has_and_belongs_to_many`关系,以及如何操作这种关系。重点在于中间表的命名规则和关系的建立。

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

    如图所示,在demo数据库中有assemblies和parts两张表。一个assembly有多个part,一个part也拥有多个assembly,是一个n:n关系。


1.建立数据表

      由于n:n的关系是以中间表的形式表达的,所以需要创建图示中的三张表assemlies, parts和中间表assemlies_part。

 

      编辑db/migrate/目录下新建的xxxx_create_assemblies_and_parts.rb文件,在该文件中定义中间表:


       注意,该表包含n:n的两端表的主键,且自身不使用主键,故:id=>false。

       另外,该中间表的表名是“assemblies_part“,以中间的下划线连接两张表,并且按照字母顺序小在前字母顺序大的在后排列,如果创建”part_assemlies“表,则rails可能找不到该中间表。

       实际上,rails是以string的”<“操作来比较单词的,所以,如果不确定哪个表在前哪个在后,可以使用该操作符确定一下再创建表。比如有两张表”devil_x“和"devilx"(为什么会有人取这么奇怪的表名呢),那就需要自己来确认一下中间表的表名:


      所以,中间表的表名应该是“devil_x_devilx”。

      最后,确认创建数据表:


2.修改model,添加关系

      在关系的两端都需要添加has_and_belongs_to_many。



3.操作关系

       在n:n关系的两端都添加了如下方法:


      可以看到,添加的方法和has_many关系添加的方法相同,所以就不再重复介绍使用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值