Ruby on rails RubyonRails:一对一映射。只是语义学还是一种真正不同的结构

Ruby on rails RubyonRails:一对一映射。只是语义学还是一种真正不同的结构,ruby-on-rails,ruby,Ruby On Rails,Ruby,因此,我正在为RubyonRails创建一个插件,使实现的地址(包括国家、州、城市和邮政编码)更容易遵循这种模式,但这与地址模型的关联无关 从我的地址模型开始 class Address < ActiveRecord::Base has_one :country has_one :state has_one :city has_one :zip_code end 类地址

因此,我正在为RubyonRails创建一个插件,使实现的地址(包括国家、州、城市和邮政编码)更容易遵循这种模式,但这与地址模型的关联无关

从我的地址模型开始

class Address < ActiveRecord::Base
    has_one :country
    has_one :state
    has_one :city
    has_one :zip_code
end
类地址
属于
有一个

似乎是一样的,因为两者都只需要一个模型来声明所有权和外键

而且这两种说法似乎都符合逻辑

一个地址属于一个帐户,而一个帐户只有一个地址


这是唯一的语义还是有真正的区别

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

如果我们根据您的模型的当前状态,那么您必须确保诸如
国家
城市
、和
邮政编码
等表都有一个名为
地址id
的列。想必那不是你想要的

因此,您必须按如下方式更改
地址
型号:

class Address < ActiveRecord::Base
  belongs_to :country
  belongs_to :state
  belongs_to :city
  belongs_to :zip_code
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

打得好,实际上你写的正是我写的。我用的是属于你的。我只是想看看别人会怎么说。哦,我明白了。但我不明白使用has_one的好处是什么?这是不是为了让你可以调用belish_to对象?我已经扩展了我的答案来回答你的评论。看一看。
 Merchant has one Store     
 Store belongs to Merchant