gpt4 book ai didi

ruby-on-rails - Rails 中的连接表有什么用?

转载 作者:行者123 更新时间:2023-12-04 05:47:26 25 4
gpt4 key购买 nike

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

例如,当我运行 rails g migration CreateJoinTable products suppliers ,它会创建各自的 产品_供应商表带 products_id 供应商_id 列。此外,这些字段具有选项 :null默认设置为false。为什么需要这些字段?它们是用来做什么的?那空选项是什么?

提前致谢。

最佳答案

这是标准 relational database 功能。

——

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

enter image description here

In context of relational databases, a foreign key is a field (or collection of fields) in one table that uniquely identifies a row of another table



在 Rails 的情况下,数据库中的“关系”由 ActiveRecord 维护。 - 一个 ORM (Object Relational Mapper) .这意味着从应用程序层,您只需要专注于填充对象:
@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

enter image description here

这样做的问题是它只允许您关联单个记录;如果你想关联多个( many-to-many ),你需要一个 join table .

Rails 用途 join tables has_many :through has_and_belongs_to_many 关系...

enter image description here

连接表(至少)填充了 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关联,连接表是必要的,以存储对相关外键的所有引用。

关于ruby-on-rails - Rails 中的连接表有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com