form_withの今の認識
※間違っている可能性があります
viewからcontrollerに送るヘルパーメソッド、
モデルを入れると、viewがnewならcreateへ、
viewがeditならupdateへ良き塩梅で行ってくれる。
良き塩梅に行ってくれるため、
新規作成の時と編集画面の時で_formのようにviewをフォーム配下でまとめられたりする。
良き塩梅で行ってくれるとなんでまとめられるのかって?
newの時urlでcreateに繋げちゃった世界線で考えてみて下さい、
editの時におんなじ感じで書くし、まとめよって思いますよね?
createいってまうて!おいだるいて!ってなるでしょ?
痒い所に手が届く、そんなヘルパーメソッドだと思ってます。
form_with使い方
<%= form_with @ニカ do |d| %>
<%= d.hidden_field :ヒトヒトの実 %>
<%= d.submit 'ゴムゴムの実' %>
<% end %>
これがform_withの使い方です。
今回の場合form_withを用いて、
dに隠されたヒトヒトの実をゴムゴムの実で伝えて、モデルニカで送ってます。
もっともふざけたform_withですね。
ついでに
本当に知らない人向けに、ちゃんとしたのも置いておきます。
<%= form_with @モデル do |f| %>
#ここにf.でモデルに送るものを選択したり入力させる場所を入れる
<% end %>
こんな感じになってます。
つまり上のふざけたform_withでは
hidden_field :表示はされないがモデルに送りたい時使うメソッド
submit 送信ボタン
この二つをcontrollerに送っているということです。
つまり隠されたヒトヒトの実をゴムゴムの実で伝えて、モデルニカでcontrollerに送っている。
そういうことです。
ちなみにこのf.の一族は他にも、
こんなのがあるよって友達のChatGPTが言ってました。
text_field: テキスト入力フィールドを生成します。
password_field: パスワード入力フィールドを生成します。
email_field: メールアドレス入力フィールドを生成します。
phone_field: 電話番号入力フィールドを生成します。
number_field: 数値入力フィールドを生成します。
date_field: 日付入力フィールドを生成します。
time_field: 時刻入力フィールドを生成します。
datetime_field: 日付と時刻入力フィールドを生成します。
text_area: テキストエリアを生成します。
select: セレクトボックスを生成します。
collection_select: コレクションからセレクトボックスを生成します。
check_box: チェックボックスを生成します。
radio_button: ラジオボタンを生成します。
file_field: ファイルアップロードフィールドを生成します。
hidden_field: 非表示のフィールドを生成します。
submit: 送信ボタンを生成します。
良き塩梅のものを使っていきたいですね。
使っていて最近思ったことと、それの腹落ち
form_tagとform_forがなくなってform_withに統一されたと歴史の教科書で読みました。
form_with url:'飛びたいurl'みたいにurlで直接も飛べる、
それを聞いた時には便利だなって思いました。
でも使っているとモデルに絶対送るのにわざわざなんでurlで送るんや?
newからupdateに送ったりする時があるんか?
そう疑問に思いました。
そして良き友のChatGPTに聞いてみました。
そしたらこういう時はモデルに送らないでしょ?って言われて腹落ちしました。
検索フォーム: ユーザーがデータを検索するためのフォームは、通常モデルに紐付いていません。検索結果を表示するためのフォームを作成する場合、form_withを使用しますが、モデルは必要ありません。
お問い合わせフォーム: ユーザーがウェブサイトの管理者にメッセージを送信するためのフォームも、通常モデルに紐付いていません。このようなフォームは、メール送信などのアクションを実行するために使用されます。
カスタムアクションへのフォーム: モデルに紐付いていない特定のアクションに対してフォームを作成する場合、form_withを使用します。たとえば、ユーザーがサイトに新しいページを提案するためのフォームを作成する場合などがあります。