📅  最后修改于: 2023-12-03 15:01:06.593000             🧑  作者: Mango
在Ruby on Rails中,我们可以使用has_one
方法来建立模型之间的单向关联关系。这个方法会自动为拥有方创建一个外键,并且使得被拥有方可以直接作为其成员变量调用。
在Rails的模型中,我们可以这样使用has_one
方法:
class Order < ApplicationRecord
has_one :shipping_address
end
class ShippingAddress < ApplicationRecord
belongs_to :order
end
这里,Order
有一个ShippingAddress
,而ShippingAddress
则belongs_to
于Order
。这种单向的关联关系通常适用于一个模型拥有零或一个其它模型的情况。
当我们调用has_one
方法时,Rails会在拥有方的数据表中添加一个外键,这个外键默认的命名方式是被拥有方的模型名再加上_id
,例如上例中的shipping_address_id
。Rails同时也会给拥有方创建一个belongs_to
关联。如果我们不想使用这个默认的外键名,可以在has_one
中加上:foreign_key
来指定:
class Order < ApplicationRecord
has_one :shipping_address, foreign_key: "address_id"
end
这里,外键名改为了address_id
。
当我们想要访问拥有方的某一个被拥有方成员变量时,我们可以直接使用这个变量名。例如我们可以这样访问order
的shipping_address
:
order = Order.find(1)
shipping_address = order.shipping_address
has_one
是一个非常方便的Rails模型关联方法,在建立一对一模型关系时特别有用。我们可以通过belongs_to
来建立反向关联关系,也可以使用foreign_key
来改变默认的外键名。