見出し画像

備忘録14:Rails-外部キーをNULLにする

転職のための3月6日から某スクールにでプログラミング学習を始めた32歳のおっさんです。時系列でHTML⇨CSS⇨Rails & JavaScript &SQLを学習中。
最近C#とPHPにも興味が湧いてきた。


1:開幕の自問自答

①外部キーって邪魔になることない?
 ⇨基本無いと思いますが、どう言う時ですか?
②ユーザーモデルが複数あって、チャットとか投稿機能作る時とか?
 ⇨確かにモデルが複数あるとどちらかが空になりますね。
③でも外部キーNULLだとエラー出ちゃうじゃん?
 ⇨そうですね。でも無くても良いですよ。
④マジ?????????
 ⇨マジ。

と、言うわけで今回は外部キーのNULLを許容する方法です。
物凄く簡単です。
知らずに1時間くらい色々考えてました(おこ



2:環境

①OS:Mac BigSur
②Rails:6.0.0



3:全体の流れ

①やりたいことの確認
②アソシエーションの確認
③モデルの編集
④DBの確認




4:やりたいことの確認

スクリーンショット 2021-06-28 16.10.09

こんな感じで外部キーが無くても良い。
と言う作りにしたいです。
nameカラムはユーザー入力ではなく外部キーから自動で取得しています。
なので、実際に利用者が入力するのはメッセージのみです。



5:アソシエーションの確認

スクリーンショット 2021-06-28 16.20.54

・userモデル
has_many :contact_bazaars

・companyモデル
has_many :contact_bazaars


・contact_bazaarモデル
belongs_to :user
belongs_to :company

このようにアソシエーションが組まれています。
今回はこのアソシエーションに手を加えます。



6:モデルの編集

スクリーンショット 2021-06-28 16.14.31

・外部キーがNULLになることを許容する。

belongs_to :モデル名, optional: true
※記述無しのデフォルト状態では optional: false となっている。

これで外部キーがNULLでも構わず保存することが出来ます。
このオプションを追加するだけでOKです。
とっても簡単!!!!!!!!!



7:DBの確認

スクリーンショット 2021-06-28 16.10.09

最初に貼ったSSと同じですが
結果としてこのようにDBにNULLを許容できます。
たった1つのオプションで済むのですからありがたいですねっ!




8:終わりに

今回とても短いですが
元が超お手軽簡単と言うことは、記事も超お手軽簡単になると言う訳です。

とは言うものの、あまり使う機会も無いかもしれません。
基本、deviseで複数モデル扱って更に交流の場を作る。と言うこともあまり無い気がするので。
そもそもoptionalなんか使わなくて良い方法もあるかもしれません。
現状だとコントローラーで
「current_user.nil?」か「current_company.nil?」の条件分岐が必要なので。

次回は検索Gemのransackについて書こうと思います。
導入とキーワード検索を作る方法についてです。






終わり!!!!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?