【Rails】form_with の復習
Ralisを勉強していたら、form_with(ヘルパーメソッド)の理解ができていなかったため、それを備忘録としてまとめました。
てなわけで、form_withももう一度復習することに。
form_withとはなんぞや
Railsのview内で使用できるフォーマット。
よくある検索フォームとか作れちゃう!?
- 基本形
以下が基本形。
|f|の部分は、ブロック変数(ブロックの内部のみ有効な変数、)。
<%= form_with do |f| %>
#処理
<% end %>
form_withに追加できるオプションなど
- モデルとの連携
modelとの連携を行う場合は、以下の通り。
modelと連携することで、データーベース(db)へデータを簡単に保存できるなどできる。
<%= form_with model:#モデル名 do |f| %>
#処理
<% end %>
- url追加
基本形に追加する形として、フォームの情報を送信するurlを追加することができる。
rails routesコマンドで、urlを確認して、記載すると良い。
<%= form_with model:#モデル名, url: '#URL' do |f| %>
#処理
<% end %>
- method追加
これも基本形を追加する形として、上記にしてしたURLをどのメソッドでURLを飛ばすか指定することができる。(ex: POST・PUT・DELETEメソッドなど)
<%= form_with model:#モデル名, url: '#URL', metod: :#メソッド名 do |f| %>
#処理
<% end %>
local: ture??
form_withメソッドを色々調べてみると、以下のような記載されているものを見つけました。
<%= form_with (model:#モデル名, local: ture) do |f| %>
#処理
<% end %>
local: ture???なんじゃそれ。
色んな記事とか見てみると、
Rails 6.0および5.2では、form_withを使うすべてのフォームはデフォルトでremote: trueを実装します。これらのフォームではXHR(Ajax)リクエストを使ってデータを送信します。これを無効にするには、local: trueを指定してください。詳しくはRails で JavaScript を使用するガイドを参照してください。
form_withはRailsの比較的新しいメソッド。このメソッドではデフォルトがAjax通信で、非同期通信になってしまうのです。
v6.1まで記載ありましたが、v7.0になると記載がなくなっておりました。
なんだ現在のRailsのバージョンがv8.0になっているので、関係なくなっちゃったのか。
でも、Ajax通信?非同期通信??分からん用語がでてきたぞ。
一応調べてみると、
-
Ajax通信
asynchronous(アシンクロナシス=非同期の) javascript + XML の略
非同期にサーバの間に通信を行うこと。 -
非同期通信
プログラム(コンピュータに対する指示をまとめたもの)で処理を行う際に、他の処理も進めることができる処理方法。
例えば、非同期通信方式を活用しているGoogleMapでは、ページ全体をリロードしていない。
その結果、処理が重くならないというメリットも。
非同期通信を行うために、Ajax通信という仕組みを使っていると理解した。(Ajax通信は、また今度調べる)
つまり、from-withは非同期処理という処理を行っているため、同期処理(非同期処理の逆。順番に最初から処理を行う処理方法)にしたい。
local:tureがないと、非同期処理になってしまい、ページ全体がリロードされず、必要な箇所だけページが更新されてしまう(エラーになってしまう)。
現在は、関係ないっぽい。
versionごとに廃止されたメソッドもあるから、Railsガイドを読んでみないといけないと学んだ。
知らない用語もあったので、こんな感じで寄り道して調べることも必要だと感じた。
初心者で間違いもあるので、何かあれば指摘してください!
Discussion