備忘録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が有る場合
正常な場合
これが正常な場合。
よく見る光景ですね。何もおかしな所はありません。
次は、本題のlocal: trueが無い場合です。
6:local: trueが無い場合
このようなことが起こります。
「local: true」が存在しない為にレスポンスを受け取っていません。
つまり、以下2つの動作が行われないことになります。
①戻ってきたインスタンスを受け取り「error.full_messages」を読み込む
②controllerで不備があった場合の :newアクション の呼び出し
また、レスポンスを受け取らないため
仮に入力に不備がなく正常にレコードの作成が出来たとしても
createアクションの正常にレコードが作成出来た際の動作も行われず
そのまま同じ画面に画面に留まることになります。
あぁ、なんと恐ろしい。
「local: true」このたった11文字が無いだけでえらい事になります。
おぉ怖い怖い。
本当に怖いですね。ホント怖い。
7:終わりに
local: true 普段何気なく書いてましたが、とんでもなく重要な一文でした。
プログラミング学習は50%の理解で先に進んで良いとよく言われます。
実際、そうだと思います。
すぐ変わるし、他のことやってるといつの間にか理解度が進んでいるので。
ただ、理解0%で済ませるのは本当に危険な事なんだなぁ。
と、言うことを身に染みて理解しました。
記述する内容に知らない物がある際は
せめて軽く調べるくらいはしておこうと言う教訓になりました。
無知は罪ってこう言う事ですね。
ホント気を付けます。はい。
終わり!!!!!!!!!!!!!!!
この記事が気に入ったらサポートをしてみませんか?