見出し画像

備忘録16:Rails-form_with local: true

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


1:開幕の自問自答

①form_withのオプションにlocal: true ってあるじゃん?
 ⇨ありますねぇ。
②あれ、今まで特に何も考えずに使ってきたんすよ。
 ⇨そうですね。
③で、ある日「別になくても良くね」って思ったんですよ。
 ⇨良くあることですね。
④そしたら、結果的に4時間くらい要らん作業したんですよ。
 ⇨やばいですね。
⑤気付いた時の作業も入れたら合計6時間くらい溶かしたよ。
 ⇨ヤバいですね。

と、言う訳で今回はform_withのオプションlocal: trueについて。
こいつのおかげでどえらい時間を無駄にしました。
プログラミングは理解度50%で進んで良いかなって思ってますが
理解度0%で使うのは許されない。と言うことを実感しました。
調べたら同じ罠にハマった方もいらっしゃいました。
おかげでもう絶対忘れないと思います(憎しみ



2:環境

OS:Mac BigSur
Rails:6.0.0



3:全体の流れ

①local: trueとは?
②local: trueが有る場合
③local: trueが無い場合
④終わりに



4:local: trueとは?

結論から言えば同期通信です。
これを記載しない場合、form_withは非同期通信となります。

同期通信を簡単に言えば以下の一言です。
「サーバーとのキャッチボールを行う」
つまり、リクエストを送ったら 必ずレスポンスを受け取ります。

これに対して非同期通信は以下の一言で表せます。
「投げっぱなし」
つまり、リクエストを送っても、レスポンスを受け取りません。


同期通信・非同期通信にはそれぞれメリットがあるため
一概にどちらが良いとは言えません。
しかし、絶対に同期通信出なければならない。と言う場面はあります。
今回は、そちらを書いていきます。



5:local: trueが有る場合

正常な場合

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

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

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

これが正常な場合。
よく見る光景ですね。何もおかしな所はありません。
次は、本題のlocal: trueが無い場合です。



6:local: trueが無い場合

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

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

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

このようなことが起こります。
「local: true」が存在しない為にレスポンスを受け取っていません。

つまり、以下2つの動作が行われないことになります。
①戻ってきたインスタンスを受け取り「error.full_messages」を読み込む
②controllerで不備があった場合の :newアクション の呼び出し

また、レスポンスを受け取らないため
仮に入力に不備がなく正常にレコードの作成が出来たとしても
createアクションの正常にレコードが作成出来た際の動作も行われず
そのまま同じ画面に画面に留まることになります。

あぁ、なんと恐ろしい。
「local: true」このたった11文字が無いだけでえらい事になります。
おぉ怖い怖い。
本当に怖いですね。ホント怖い。




7:終わりに

local: true 普段何気なく書いてましたが、とんでもなく重要な一文でした。
プログラミング学習は50%の理解で先に進んで良いとよく言われます。
実際、そうだと思います。
すぐ変わるし、他のことやってるといつの間にか理解度が進んでいるので。

ただ、理解0%で済ませるのは本当に危険な事なんだなぁ。
と、言うことを身に染みて理解しました。
記述する内容に知らない物がある際は
せめて軽く調べるくらいはしておこうと言う教訓になりました。

無知は罪ってこう言う事ですね。
ホント気を付けます。はい。





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

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