ひーろのアウトプットブログ

プログラミングの学習記録と開発日記です

blongs_toの外部キーがnilでもDBへ保存できるようになるオプション

著者(author)と書籍(book)の1対多の関係があった場合、モデルは次のようになります。

class Author < ApplicationRecord
  has_many :books
end
class Book < ApplicationRecord
  belongs_to :author
end

Bookは次のカラムを持っています。

name:string
author_id:integer

belongs_to

Bookを登録する場合、author_idがnilだとバリデーションで弾かれます。
これはbelongs_toオプションを設定することで、自動的に外部キーがpresence: trueとなるからです。
デフォルトで設定してくれるのは助かりますが、困ることもあります。
例えば、書籍の著者が分からない、なんてケースもあるかと思います。

optional: true

そういう時はoptional: trueオプションを付けることで、外部キーがnilでも保存ができるようになります。

class Book < ApplicationRecord
  belongs_to :author, optional: true
end

これでauthor_idがnilでも保存ができるようになりました。