フォームの書き方 HTMLとヘルパーメソッドform_
HTMLで書けば
<form action=“/posts” method=“post”>
<input type=“text” name=“content”>
<input type=“submit” value=“投稿する“>
</form>
actionの部分はURL、methodの部分はgetかpostかの二択の通信形式を選んでいる
※現時点での推奨
form_withで書けば
<%= form_with model: @post, local: true do |form| %>
<%= form.text_field :content %>
<%= form.submit ‘投稿する’ %>
<% end %>
モデルの後にはコントローラーから渡された、ActiveRecordを継承するモデルのインスタンス(上記では@postがそれに該当)を書いてる。
自動でパスを選択してくれるのでHTTPメソッドを使用する必要がない。
データベースにデータが無ければcreate、有ればupdateみたいな感じで選んでくれる。
補足:local:trueはajaxがいらない時。デフォルトだとremote:trueなのでajax使うなら何も書かなくていい。
ヘルパーメソッド全般だろうけど、f.submitみたいな省略をよくする
form_forはほとんどform_withと書き方同じ
<%= form_for @post do |form|%>
<% edn %>
みたいな感じ。modelって書かないくらいかな?
form_tagで書けば
<%= form_tag(‘/posts’, method: :post) do %>
<input type=“text” name=“content”>
<input type=“submit” value=“投稿する“>
<% end %>
tagの中身‘/post’はURL、メソッドはHTTPメソッドを書いている
これは結構形違うね。urlもhttpメソッドも書いてるし、inputタグ使ってるし
とりあえずhtmlとform_withだけ覚えておけばいいと思う。
form_withはform_forとform_tagを併せたようなものみたいだし。大は小を兼ねるで。
一応ざっくりした違いはform_forは任意のmodelに基づいたformを作る時、form_tagはそうでない時、らしい。form_withってモデルの指定無しでも書けるってことかな?