フォームの書き方 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ってモデルの指定無しでも書けるってことかな?