当前位置:  开发笔记 > 后端 > 正文

在Rails中使用join表有什么用?

如何解决《在Rails中使用join表有什么用?》经验,为你挑选了1个好方法。

出于什么目的,我可能需要使用连接表?

例如,当我运行时rails g migration CreateJoinTable products suppliers,它会使用products_idsuppliers_id列创建相应的products_suppliers表.此外,默认情况下,这些字段的选项设置为false.为什么需要这些领域?它们用于什么?什么是null选项?:null

提前致谢.



1> Richard Peck..:

这是标准relational database功能.

-

Rails是在关系数据库(通常是MYSQL或PGSQL)之上设计的,这基本上意味着您可以通过使用外键来引用"关联"数据:

在此输入图像描述

在关系数据库的上下文中,外键是一个表中的一个字段(或字段集合),它唯一地标识另一个表的一行


在Rails的情况下,数据库中的"关系"由ActiveRecord- ORM(对象关系映射器)维护.这意味着从应用程序层开始,您只需要关注填充对象:

@user = User.find x
@user.products #-> outputs records from "products" table with foreign key "user_id = x"

ActiveRecord管理您的关联,这就是您必须在模型中定义belongs_to/ has_many指令的原因.

您创建的大多数关联将直接引用其他表:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :products
end

#app/models/product.rb
class Product < ActiveRecord::Base
   belongs_to :user
end

在此输入图像描述

这个问题是它只允许你关联单个记录; 如果你想关联multiple(many-to-many),你需要一个连接表.


Rails join tables用于has_many :throughhas_and_belongs_to_many关系......

在此输入图像描述

加入表中含有(至少)primary key&foreign key的关系.例如...

user_id | product_id
   1    |     3
   1    |     5
   2    |     3

这允许你打电话:

#app/models/user.rb
class User < ActiveRecord::Base
   has_and_belongs_to_many :products
end

#app/models/product.rb
class Product < ActiveRecord::Base
   has_and_belongs_to_many :users
end

@user.products #-> all products from join table
@product.users #-> all users from join table

简而言之,如果要拥有has_many <-> has_many关联,则必须使用连接表来存储对相对外键的所有引用.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有