備忘録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:やりたいことの確認
こんな感じで外部キーが無くても良い。
と言う作りにしたいです。
nameカラムはユーザー入力ではなく外部キーから自動で取得しています。
なので、実際に利用者が入力するのはメッセージのみです。
5:アソシエーションの確認
・userモデル
has_many :contact_bazaars
・companyモデル
has_many :contact_bazaars
・contact_bazaarモデル
belongs_to :user
belongs_to :company
このようにアソシエーションが組まれています。
今回はこのアソシエーションに手を加えます。
6:モデルの編集
・外部キーがNULLになることを許容する。
belongs_to :モデル名, optional: true
※記述無しのデフォルト状態では optional: false となっている。
これで外部キーがNULLでも構わず保存することが出来ます。
このオプションを追加するだけでOKです。
とっても簡単!!!!!!!!!
7:DBの確認
最初に貼ったSSと同じですが
結果としてこのようにDBにNULLを許容できます。
たった1つのオプションで済むのですからありがたいですねっ!
8:終わりに
今回とても短いですが
元が超お手軽簡単と言うことは、記事も超お手軽簡単になると言う訳です。
とは言うものの、あまり使う機会も無いかもしれません。
基本、deviseで複数モデル扱って更に交流の場を作る。と言うこともあまり無い気がするので。
そもそもoptionalなんか使わなくて良い方法もあるかもしれません。
現状だとコントローラーで
「current_user.nil?」か「current_company.nil?」の条件分岐が必要なので。
次回は検索Gemのransackについて書こうと思います。
導入とキーワード検索を作る方法についてです。
終わり!!!!!!!!!!!!
この記事が気に入ったらサポートをしてみませんか?