gpt4 book ai didi

ruby-on-rails - Rails 关联 primary_key 选项

转载 作者:行者123 更新时间:2023-12-02 15:32:03 24 4
gpt4 key购买 nike

我知道外键用于指定子类上何时有不同的列名(不同于父子的类名)。我知道主键和外键是什么,并且多次阅读关于关联的 Rails 文档,但我无法弄清楚主键选项的用途。

1) 但是 primary_key 选项的用途是什么?调用关联时如何改变sql?

2) 在什么情况下您需要指定关联的主键?

3) 在什么情况下您需要同时指定 primary_key 和 foreign_key?

下面是在关联上指定 foreign_key 选项的示例:

class User
has_many :texts, foreign_key: :owner_id

end

class Text
belongs_to :user, foreign_key: :owner_id

end


User Table
id| name |

Text Table
id| owner_id |name

最佳答案

好的,所以我对 SQL 进行了更多思考并弄明白了。当您的 child 具有与您 parent 的 classname_id 不同的 foreign_key 名称时,您可以使用 foreign_key 选项,但在您的父表上,您仍在使用 ID 作为标识符。

user table
id|name|age

text table
id|random_id|conversations

select * from user where user.id = text.random_id

select * from text where text.random_id (foreign_key) = account.id (primary key)

另一方面,当您根本不想使用 id 来链接关系时,您可以使用 primary_key 和 foreign_key。

user table
id|userable_id|name|age

text table
id|userable_ss_id|conversations

此处:如果您想将 userable_ss_id 链接到 userable_id,您可以在这两个关系中同时包含 primary_key 和 foreign_key 选项。

class User 
has_many :texts, primary_key: :userable_ss_id, foreign_key: :userable_id
end

class Text
belongs_to :user, primary_key: :userable_ss_id, foreign_key: :userable_id
end

基本经验法则:

select * from text where text.(foreign_key) = account.(primary key)

关于ruby-on-rails - Rails 关联 primary_key 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235116/

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