SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

has_oneとbelongs_toの違い


自身が他のテーブルをたどるキーを所持している場合は、belongs_to 自身が他のテーブルからたどるキーで示されている場合は、has_one

belongs_to

class Book < ApplicationRecord
  belongs_to :author
end

と書くとすると Bookテーブルが、author_idをカラムに持っていてAuthorをたどれます。

has_one

class Supplier < ApplicationRecord
  has_one :account
end

Supplierのテーブルにはaccountのidなどはもっていません。 しかし、Accountテーブルはsupplier_idのようにこちらを示すカラムがある場合です。

まとめ

1対1の関係で以上のbelongs_toとhas_oneを書き合う、といったところですね。 親と子供、従属かなどの視点で考えてみるとわかりやすいかもしれません。

参考 Active Record の関連付け (アソシエーション) | Rails ガイド コードはrails guidesからお借りしています。