gpt4 book ai didi

ruby-on-rails - Ruby on Rails : one-to-one mapping. 只是语义或真正不同的结构

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:49 25 4
gpt4 key购买 nike

所以我正在为 Ruby on Rails 创建一个插件,以便为可以遵循该范式的国家/地区实现包括国家、州、城市和邮政编码在内的地址更容易,但这与地址模型的关联方式无关.

所以从我的地址模型开始。

class Address < ActiveRecord::Base
has_one :country
has_one :state
has_one :city
has_one :zip_code
end

belongs_tohas_one 有什么区别

似乎是一回事,因为两者都只需要一个模型来声明所有权和foreign_key

而且看起来两者都是合乎逻辑的。

an address belongs to an account and an account has one address

这只是语义还是有真正的区别

最佳答案

从 ActiveRecord 关联的角度来看,任何带有 belongs_to 声明的模型都有外键,任何带有 has_one 声明的模型都有主键。

如果我们按照您模型的当前状态,那么您必须确保诸如 countriessatescitieszip_codes 有一个名为 address_id 的列。大概这不是您想要的。

所以你必须改变你的 Address 模型如下:

class Address < ActiveRecord::Base
belongs_to :country
belongs_to :state
belongs_to :city
belongs_to :zip_code
end

这也意味着您必须确保 addresses 表具有以下列:country_idstate_idcity_idzip_code_id(我假设这是您当前的表结构)。

编辑 [我扩展了我的回答以解决评论部分提出的问题。]在您的示例中,您应该使用 has_many 关联而不是 has_one 关联。

class Country
has_many :addresses
end

class State
has_many :addresses
end

class City
has_many :addresses
end

class ZipCode
has_many :addresses
end

您可以调用以下电话:

country.addresses
state.addresses
city.addresses
zip_code.addresses

我在以下场景中使用了 has_one 关联。

1) 有个人资料的用户

 User has one Profile
Profile belongs to User

2) 商店的商家帐户

 Merchant has one Store     
Store belongs to Merchant

关于ruby-on-rails - Ruby on Rails : one-to-one mapping. 只是语义或真正不同的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2441343/

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