📜  has_one rails - Ruby (1)

📅  最后修改于: 2023-12-03 15:01:06.593000             🧑  作者: Mango

Ruby on Rails中的has_one

在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,而ShippingAddressbelongs_toOrder。这种单向的关联关系通常适用于一个模型拥有零或一个其它模型的情况。

具体实现

当我们调用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

当我们想要访问拥有方的某一个被拥有方成员变量时,我们可以直接使用这个变量名。例如我们可以这样访问ordershipping_address

order = Order.find(1)
shipping_address = order.shipping_address
总结

has_one是一个非常方便的Rails模型关联方法,在建立一对一模型关系时特别有用。我们可以通过belongs_to来建立反向关联关系,也可以使用foreign_key来改变默认的外键名。