寄り道も道草も一緒

マニュアルセーブ機能のようなもの

belongs_toのoptional: trueの意味

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

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