Railsのbelongs_toに指定できるoptional: trueとは?

今年1月に転職して新しい環境で働き始めていて、そこのプロジェクトではRuby on Railsを使っています。

今までRuby on Railsでサービス等を作った経験があまりがなくRailsを知る必要が出てきて、最近出版された「Ruby on Rails5の上手な使い方」という本を買いました。

この本にはモデルのbelongs_to に以下のようなオプションが書かれていました。

class Customer < ApplicationRecord
  has_many :orders
end

class Address < ApplicationRecord
  belongs_to :customer, optional: true
end

この optional: true ってなんなのか。

結論から言うと、belongs_toの外部キーnilを許可するというものです。

上記のコードであればAddress.customer_idが外部キーになり、値がセットされていない場合はバリデーションではじかれますが、optional: trueを設定しておくと、外部キーがnilであってもDBに保存できます。

ただDBの設計上、外部キーのnilを許可することが少ない気がするので、あまり使う設定ではないかもしれません。