belongs_toのoptional: trueの意味

Railsのソースを読んでいて、以下のような記述がありました

belongs_to :company, optional: true

完全に忘れていたので、未来の自分のためにメモしておきます

belongs_toのoptional: trueとは?

外部キーがnilでも許可するという意味です

同じ記事を開いた形跡があったので、前にも調べたのに忘れていたようです

使用例

例えば、

class User < ApplicationRecord
  has_many: posts
end

class Company < ApplicationRecord
  has_many: posts
end


class Post < ApplicationRecord
  belongs_to :company, optional: true
  belongs_to :user, optional: true
end

上のような定義があり、

Userが追加した記事のデータもCompanyが追加した記事のデータも同じPostテーブルに保存されるとします

Postテーブルに保存されているデータには、Userに紐づいているものもあれば、Companyに紐づいているものもありますが、

UserとCompanyの両方に紐づいていることはありません

この場合、Userに紐づくPostのデータには、user_idが保存されていますが、company_idはnilになります

もし、optional: trueをつけていなかった場合、company_idがnilだとエラーになります

このような時にoptional: trueが必要になってきます

参考

blog.ryskit.com